我的目标是在添加新联系人时更新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()谢谢
发布于 2014-12-02 09:02:42
您只需调用contactsData()一次,它就会将来自数据库的数据填充到qtablewidget中。如果要刷新qtablewidget,则需要再次调用该方法。您可以创建pushbutton并将其连接到contactsData(),因此当您按下该按钮时,就可以从数据库中重新加载联系人,而不必退出程序。
如果需要自动完成,可以创建调用contactsData()的计时器。
编辑
只需在contactsData()方法的末尾添加这一行:
QtCore.QTimer.singleShot(10000, self.contactsData)它将每10秒重新加载数据。
https://stackoverflow.com/questions/27212489
复制相似问题