Добавление записей в БД и таблицу QTableView
Помогите пожалуйста вывести элементы БД в QTableView
, я недавно работаю PyQt5 и не могу разобраться с этим:
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtSql import QSqlDatabase, QSqlQuery, QSqlTableModel, QSqlQueryModel
from PyQt5.Qt import *
from PyQt5.QtSql import *
import sqlite3
connection = sqlite3.connect('datapass.db')
cursor = connection.cursor()
cursor.execute('''CREATE TABLE IF NOT EXISTS newpass
(platform TEXT,
login TEXT,
password TEXT
)''')
connection.commit()
connection.close()
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(500, 400)
MainWindow.setStyleSheet("background-color: qlineargradient(spread:repeat, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(153, 153, 230, 255), stop:1 rgba(255, 191, 191, 255));")
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.pushButton_dobavit = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_dobavit.setGeometry(QtCore.QRect(120, 340, 90, 30))
font = QtGui.QFont()
font.setFamily("Arial")
font.setPointSize(12)
font.setBold(True)
font.setWeight(75)
self.pushButton_dobavit.setFont(font)
self.pushButton_dobavit.setStyleSheet("QPushButton{\n"
" color: rgb(74, 78, 145);\n"
" border: 2px solid ; \n"
" border-color: qlineargradient(spread:repeat, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(74, 111,
230, 255), stop:1 rgba(255, 144, 144, 255));\n"
"}\n"
"QPushButton:hover{\n"
" \n"
" \n"
" background-color: qlineargradient(spread:repeat, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(138,
138, 230, 255), stop:1 rgba(255, 171, 171, 255));\n"
"}")
self.pushButton_dobavit.setObjectName("pushButton_dobavit")
self.pushButton_nazad = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_nazad.setGeometry(QtCore.QRect(20, 340, 90, 30))
font = QtGui.QFont()
font.setFamily("Arial")
font.setPointSize(12)
font.setBold(True)
font.setWeight(75)
self.pushButton_nazad.setFont(font)
self.pushButton_nazad.setStyleSheet("QPushButton{\n"
" color: rgb(74, 78, 145);\n"
" border: 2px solid ; \n"
" border-color: qlineargradient(spread:repeat, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(74, 111,
230, 255), stop:1 rgba(255, 144, 144, 255));\n"
"}\n"
"QPushButton:hover{\n"
" \n"
" \n"
" background-color: qlineargradient(spread:repeat, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(138,
138, 230, 255), stop:1 rgba(255, 171, 171, 255));\n"
"}")
self.pushButton_nazad.setObjectName("pushButton_nazad")
self.pushButton_udalit = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_udalit.setGeometry(QtCore.QRect(220, 340, 90, 30))
font = QtGui.QFont()
font.setFamily("Arial")
font.setPointSize(12)
font.setBold(True)
font.setWeight(75)
self.pushButton_udalit.setFont(font)
self.pushButton_udalit.setStyleSheet("QPushButton{\n"
" color: rgb(74, 78, 145);\n"
" border: 2px solid ; \n"
" border-color: qlineargradient(spread:repeat, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(74, 111,
230, 255), stop:1 rgba(255, 144, 144, 255));\n"
"}\n"
"QPushButton:hover{\n"
" \n"
" \n"
" background-color: qlineargradient(spread:repeat, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(138,
138, 230, 255), stop:1 rgba(255, 171, 171, 255));\n"
"}")
self.pushButton_udalit.setObjectName("pushButton_udalit")
self.tableView = QtWidgets.QTableView(self.centralwidget)
#self.tableWidget = QtWidgets.QTableView(self.centralwidget)
self.tableView.setGeometry(QtCore.QRect(50, 30, 400, 290))
self.tableView.setObjectName("tableView")
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.pushButton_dobavit.setText(_translate("MainWindow", "Добавить"))
self.pushButton_nazad.setText(_translate("MainWindow", "Назад"))
self.pushButton_udalit.setText(_translate("MainWindow", "Удалить"))
self.pushButton_dobavit.setCursor(QCursor(QtCore.Qt.PointingHandCursor))
self.pushButton_nazad.setCursor(QCursor(QtCore.Qt.PointingHandCursor))
self.pushButton_udalit.setCursor(QCursor(QtCore.Qt.PointingHandCursor))
class Dialog(QDialog):
def __init__(self):
super().__init__()
self.setWindowTitle('Input Dialog')
self.line_edit_platform = QLineEdit()
self.line_edit_login = QLineEdit()
self.line_edit_password = QLineEdit()
form_layout = QFormLayout()
form_layout.addRow('Platform:', self.line_edit_platform)
form_layout.addRow('Login:', self.line_edit_login)
form_layout.addRow('Password:', self.line_edit_password)
button_box = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel)
button_box.accepted.connect(self.accept)
button_box.rejected.connect(self.reject)
main_layout = QVBoxLayout()
main_layout.addLayout(form_layout)
main_layout.addWidget(button_box)
self.setLayout(main_layout)
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.pushButton_nazad.clicked.connect(self.close)
self.pushButton_dobavit.clicked.connect(self.add)
db = QSqlDatabase.addDatabase('QSQLITE')
db.setDatabaseName('datapass.db')
db.open()
self.model = QSqlTableModel(self)
self.model.setTable("newpass")
self.model.select()
self.tableView.setModel(self.model)
def add(self):
inputDialog = Dialog()
rez = inputDialog.exec()
if not rez:
msg = QMessageBox.information(self, 'Внимание', 'Диалог сброшен.')
return
platform = inputDialog.line_edit_platform.text()
login = inputDialog.line_edit_login.text()
password = inputDialog.line_edit_password.text()
if not platform or not login or not password:
msg = QMessageBox.information(self, 'Внимание', 'Заполните пожалуйста все поля.')
return
r = self.model.record()
r.setValue("platform", platform)
r.setValue("login", login)
r.setValue("password", password)
self.model.insertRecord(-1, r)
self.model.select()
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())
Источник: Stack Overflow на русском