如何更新QTableWidget?

时间:2014-11-30 10:58:24

标签: python sqlite pyqt pyside qtablewidget

我的目标是在添加新联系人时更新QTableQidget。我没有问题添加联系人或他们出现在QTableWidget中。我的问题是我必须退出程序,然后再次启动它以查看新添加的联系人。他们是一种更新或刷新QTableWidget以在将新联系人添加到数据库时显示新联系人而无需退出程序的方法。我尝试过update()并重新绘制,没有任何变化。

class BrowseContacts(QtGui.QWidget):
    #Display New Contacts Widget
    def __init__(self):
        super(BrowseContacts, self).__init__()
        self.initUI()
        self.contactsData()


    #User Interface
    def initUI(self):
        self.new_layout = QtGui.QGridLayout()

        self.contactsTableWidget = QtGui.QTableWidget()
        self.contactsTableWidget.setColumnCount(10)

        self.contacts_label = ['First Name', 'Last Name', 'Home Phone', 'Cell Phone', 'Business Name', 'Email Address', 'Address', 'City', 'State', 'Zip Code']
        self.contactsTableWidget.setHorizontalHeaderLabels(self.contacts_label)
        self.contactsTableWidget.setSortingEnabled(True)

        self.new_layout.addWidget(self.contactsTableWidget)
        self.setLayout(self.new_layout)

        self.setStyleSheet('QTableWidget::item {background-color: #ffffff; color: #000000}' 'QTableWidget::item:selected {background-color: #3aa8ad; color: #ffffff;}')

    def contactsData(self):
        #Connect to Database
        connection = sqlite3.connect('contacts.db')
        cur = connection.cursor()

        rowcount = cur.execute('''SELECT COUNT(*) FROM contacts''').fetchone()[0]

        self.contactsTableWidget.setRowCount(rowcount)
        cur.execute('''SELECT  * FROM contacts''')

        for row, contacts in enumerate(cur):
            for column, contact in enumerate(contacts):
                self.contactsTableWidget.setItem(row, column, QtGui.QTableWidgetItem(str(contact)))

        cur.close()
        connection.commit()
        connection.close()

谢谢

1 个答案:

答案 0 :(得分:1)

您只需拨打contactsData()一次,就可以使用数据库中的数据填充qtablewidget。如果要刷新qtablewidget,则需要再次调用该方法。您可以创建pushbutton并将其连接到contactsData(),因此当您按下该按钮时,联系人将从您的数据库重新加载,而无需退出该程序。

如果您需要自动完成,可以创建计时器以呼叫contactsData()

修改

只需在contactsData()方法的末尾添加此行:

QtCore.QTimer.singleShot(10000, self.contactsData)

它将每10秒重新加载一次数据