我想用qt中的execute语句更新表/插入新项,我希望表立即显示这个新数据。这样做的最简单的例子是什么?
我正在使用python,sqllite和pyqt5。我一直在寻找如何做到但没有成功。
我假设它不会占用UI,或者你可能必须使用线程。在这种情况下,我想使用QThread。
编辑:好的我找到了一个例子,我转换为PyQt5,添加了一个编辑功能并清理干净。现在只需要弄清楚如何一次删除所有条目,看看使用带有qthread和sqlite的模型是否会响应:
import sys
from PyQt5 import QtCore, QtWidgets, QtGui, QtSql
def initializeModel(model):
model.setTable('sportsmen')
model.setEditStrategy(QtSql.QSqlTableModel.OnFieldChange)
model.select()
model.setHeaderData(0, QtCore.Qt.Horizontal, "ID")
model.setHeaderData(1, QtCore.Qt.Horizontal, "First name")
model.setHeaderData(2, QtCore.Qt.Horizontal, "Last name")
def createView(title, model):
view = QtWidgets.QTableView()
view.setModel(model)
view.setWindowTitle(title)
return view
def addrow():
print(model.rowCount())
ret = model.insertRows(model.rowCount(), 1)
print(ret)
def editrow():
model.setData(model.index(1, 1), "LEL")
#model.submitAll()
def findrow(i):
delrow = i.row()
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
db = QtSql.QSqlDatabase.addDatabase('QSQLITE')
db.setDatabaseName('sports.db')
model = QtSql.QSqlTableModel()
delrow = -1
initializeModel(model)
view1 = createView("Table Model (View 1)", model)
view1.clicked.connect(findrow)
dialog = QtWidgets.QDialog()
layout = QtWidgets.QVBoxLayout()
layout.addWidget(view1)
addBtn = QtWidgets.QPushButton("Add a row")
addBtn.clicked.connect(addrow)
layout.addWidget(addBtn)
editBtn = QtWidgets.QPushButton("edit a row")
editBtn.clicked.connect(editrow)
layout.addWidget(editBtn)
delBtn = QtWidgets.QPushButton("del a row")
delBtn.clicked.connect(lambda:
model.removeRow(view1.currentIndex().row()))
layout.addWidget(delBtn)
dialog.setLayout(layout)
dialog.setWindowTitle("Database Demo")
dialog.show()
sys.exit(app.exec_())