dingdot 2021-12-22 09:52
浏览 321
已结题

pyqt5界面中,使用QSqlTableModel删除一行数据,数据库数据已删除,但是界面QTableView出现空白行

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控件出现空白行,如图所示。

img


请指正,不盛感激!

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 12月30日
    • 创建了问题 12月22日

    悬赏问题

    • ¥15 为啥画版图在Run DRC会出现Connect Error?可我Calibre的hostname和计算机的hostname已经设置成一样的了。
    • ¥20 网站后台使用极速模式非常的卡
    • ¥20 Keil uVision5创建project没反应
    • ¥15 mmseqs内存报错
    • ¥15 vika文档如何与obsidian同步
    • ¥15 华为手机相册里面的照片能够替换成自己想要的照片吗?
    • ¥15 陆空双模式无人机飞控设置
    • ¥15 sentaurus lithography
    • ¥100 求抖音ck号 或者提ck教程
    • ¥15 关于#linux#的问题:子进程1等待子进程A、B退出后退出(语言-c语言)