我对setTable()方法对QSqlTableModel的作用感到困惑。我知道它会告诉模型需要处理哪个数据库表,但我在这里面临两个问题,这让我感到困惑
假设我已经创建了一个foem,它接受用户输入并创建一个数据库并在其中添加行,还有一个用于删除行并显示整个数据库的选项
from PyQt5 import QtCore, QtGui, QtWidgets, QtSql
from form import Ui_MainWindow
import sys
class Example(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.showInfo()
self.ui.pushButton_AddPatient.clicked.connect(self.create)
self.ui.pushButton_DeletePatient.clicked.connect(self.deleteinfo)
self.ui.pushButton.clicked.connect(lambda : self.search(self.ui.lineEdit.text()))
self.ui.pushButton_ShowPAtient.clicked.connect(self.showall)
self.show()
def create(self):
db = QtSql.QSqlDatabase.addDatabase('QSQLITE')
db.setDatabaseName('patients.db')
db.open()
query = QtSql.QSqlQuery()
query.exec_(
# SQL QUERY TO CREATE THE TABLE
)
query.exec_(
#SQL QUERY TO INSERT SOME ROWS TO THE DATABASE
)
self.model.select()
def showall(self):
self.model.setTable("patients")
self.model.select()
def showInfo(self):
db = QtSql.QSqlDatabase.addDatabase('QSQLITE')
db.setDatabaseName('patients.db')
db.open()
self.model = QtSql.QSqlTableModel()
self.model.setTable('patients')
self.ui.tableView.setModel(self.model)
self.ui.tableView.setSelectionMode(QtWidgets.QTableView.SingleSelection)
self.ui.tableView.setSelectionBehavior(QtWidgets.QTableView.SelectRows)
self.model.select()
def deleteinfo(self):
#self.model.setTable("patients")
current = self.ui.tableView.selectedIndexes()
for item in current:
self.model.removeRow(item.row())
self.model.select()
def search(self, item):
self.model.setFilter("name LIKE '%{}%'".format(item))
self.model.select()
我的问题是,为什么我必须在我的showall()
函数中包含self.model.setTable()
语句(否则它将不起作用),而将它添加到deleteinfo()
会导致故障,并且程序不会删除所选行。
如果我需要创建其他插槽来使用该模型修改数据库,该怎么办?我是否每次都需要使用self.model.setTable()
目前没有回答
相关问题 更多 >
编程相关推荐