Ui_uiForm.py 界面文件
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(552, 383)
self.gridLayout = QtWidgets.QGridLayout(Form)
self.gridLayout.setObjectName("gridLayout")
self.tableView = QtWidgets.QTableView(Form)
self.tableView.setObjectName("tableView")
self.gridLayout.addWidget(self.tableView, 0, 0, 1, 1)
self.btn_addRow = QtWidgets.QPushButton(Form)
self.btn_addRow.setObjectName("btn_addRow")
self.gridLayout.addWidget(self.btn_addRow, 1, 0, 1, 1)
self.btn_delRow = QtWidgets.QPushButton(Form)
self.btn_delRow.setObjectName("btn_delRow")
self.gridLayout.addWidget(self.btn_delRow, 2, 0, 1, 1)
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "操作数据库"))
self.btn_addRow.setText(_translate("Form", "添加一行"))
self.btn_delRow.setText(_translate("Form", "删除一行"))
pyqt5_db.py 主文件
```python
import sys
from PyQt5.QtWidgets import QApplication, QTableView,QWidget
from PyQt5.QtCore import Qt
from PyQt5.QtSql import QSqlDatabase,QSqlQuery,QSqlTableModel
from Ui_uiForm import Ui_Form as ui_form
class MainForm(QWidget,ui_form):
def __init__(self):
super().__init__()
self.db = QSqlDatabase.addDatabase('QSQLITE')
self.db.setDatabaseName('database.db')
self.initDB() #初始化数据库
self.initUI()
self.loadDataToForm()
def loadDataToForm(self):
self.model = QSqlTableModel()
self.model.setTable("people")
self.model.setEditStrategy(QSqlTableModel.EditStrategy.OnFieldChange)
self.model.select()
self.model.setHeaderData(0,Qt.Orientation.Horizontal,"ID")
self.model.setHeaderData(1,Qt.Orientation.Horizontal,"Name")
self.model.setHeaderData(2,Qt.Orientation.Horizontal,"address")
self.tableView.setModel(self.model)
def initUI(self):
self.setupUi(self)
self.tableView.clicked.connect(self.findRow)
self.btn_addRow.clicked.connect(self.addRow)
self.btn_delRow.clicked.connect(self.delRow)
self.show()
def addRow(self):
self.model.insertRow(self.model.rowCount())
def delRow(self):
# self.model.removeRow(self.rowIndex)
self.model.removeRow(self.tableView.currentIndex().row())
self.model.submitAll()
def findRow(self,evn):
# 定位tableView当前的行
# print(evn)
# self.rowIndex = evn.row()
# print(self.rowIndex)
print(self.tableView.currentIndex().row())
def initDB(self):
if self.db.open():
query = QSqlQuery()
query.exec_("create table people(id int primary key, name varchar(20), address varchar(30))")
query.exec_("insert into people values(1, 'zhangsan', 'beijing')")
query.exec_("insert into people values(2, 'wangwu', 'shanghai')")
query.exec_("insert into people values(3, 'lisi', 'guangzhou')")
query.exec_("insert into people values(4, 'zhaoliu', 'kunming')")
query.exec_("insert into people values(5, 'maqi', 'beijing')")
query.exec_("insert into people values(6, 'luhan', 'sichuan')")
query.exec_("insert into people values(7, 'wuyifan', 'chengdu')")
query.exec_("insert into people values(8, 'zhaoqiwei', 'chongqing')")
self.db.close()
print("数据库初始化完成")
return True
if __name__=="__main__":
app = QApplication(sys.argv)
mainForm = MainForm()
sys.exit(app.exec_())
程序运行后,显示,修改,添加,都正常,但是删除时,在界面点击删除,数据库确实删除了,但界面QTableView控件出现空白行,如图所示。
请指正,不盛感激!