0

setModel我需要在关闭子窗口后使用父窗口中的方法自动触发刷新 QTableView 。子窗口将数据插入到 sqlite 数据库中。子窗口中的代码片段:

class addClientWindow(QtWidgets.QWidget):
    def __init__(self, parent=None):
        QtWidgets.QWidget.__init__(self, parent)
        self.initUI()
    def initUI(self):

    def addButtonHandle():
        query = QSqlQuery()
        query.exec("insert into clients values(NULL,'"+name.text()+"','"+surname.text()+"')")
        self.close()

代码父窗口的片段:

class ClientsWindow(QtWidgets.QWidget):
    def __init__(self):
        QtWidgets.QWidget.__init__(self, parent=None)
        self.initUI()

    def addClientHandle(self):
        self.window = addClientWindow()     
        self.window.show()

    def triggerTableUpdate(self):
        self.mainTable.setModel(self.setClientModel())
4

1 回答 1

2

如果您想要一个执行某些操作并在关闭后执行另一个操作的窗口,那么您必须使用 QDialog。另一方面,不要连接 SQL 查询,因为您的代码容易受到 SQL 注入攻击。

class addClientWindow(QtWidgets.QDialog):
    def __init__(self, parent=None):
        QDialog.QWidget.__init__(self, parent)
        self.initUI()

    def addButtonHandle(self):
        query = QSqlQuery()
        query.prepare("INSERT INTO clients VALUES(?, ?)")
        query.addBindValue(name.text())
        query.addBindValue(surname.text())
        self.close()
def addClientHandle(self):
    self.window = addClientWindow()     
    self.window.exec_()
    print("update table here")
于 2021-07-29T15:04:57.640 回答