我的目标是在添加新联系人时更新QTableWidget。我没有添加联系人或者他们出现在QTableWidget上的问题。我的问题是,我必须退出程序然后重新启动才能看到新添加的联系人。有没有一种方法可以在将新联系人添加到数据库时更新或刷新QTableWidget以显示它们而无需退出程序?我尝试过update()和repaint,但没有任何变化。
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()
Thank You
self.contactsTableWidget.setRowCount(rowcount)
之前添加类似于print "Setting rowcount to {}".format(rowcount)
的内容。这将显示函数被调用并设置了新的行数。如果您没有看到打印输出,或者数字没有改变,那么您就知道问题出在其他地方了。希望是这样的情况。 - PhotonQSqlQueryModel
(http://qt-project.org/doc/qt-4.8/sql-model.html)怎么样?这个模型应该能够为您处理所有这些问题,并且同时使您的生活更轻松,因为您不必自己处理sqlite
连接。 - rainer