如何在QTableView中显示sqlite表的内容并更新数据库并将结果显示在QTableView中?

时间:2018-01-04 14:18:39

标签: python sqlite qt5 qtableview

我想用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_())

0 个答案:

没有答案