2014-11-30 2 views
2

Моя цель - обновить QTableQidget при добавлении новых контактов. У меня нет проблем с добавлением контактов или их в QTableWidget. Моя проблема в том, что мне нужно выйти из программы, а затем снова запустить ее, чтобы увидеть новые контакты. Является ли это способом обновления или обновления QTableWidget, чтобы показывать новые контакты, когда они добавляются в базу данных, не выходя из программы. Я попробовал update() и перерисовал, и ничего не изменилось.Как обновить QTableWidget?

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() 

Спасибо

+0

Не похоже, что-то не хватает. Попробуйте добавить некоторые отпечатки, чтобы убедиться, что функция действительно работает, и количество строк данных действительно изменяется. – Photon

+0

Спасибо. Можете ли вы дать мне подсказку о том, как я это делаю. Что я распечатываю и где бы я поместил функцию печати. Извините, если это глупый вопрос. Я немного смущен. – irunintotrees

+0

перед линией 'self.contactsTableWidget.setRowCount (rowcount)' добавить что-то вроде 'print 'Установка rowcount в {}". Format (rowcount) '. Он покажет, что функция вызывается и устанавливает новое количество строк. Если вы не видите печать или номер не изменился, вы поймете, что проблема в другом месте. Надеюсь, это будет нечто подобное. – Photon

ответ

1

Вы называете contactsData() один раз, и он заполняет qtablewidget с данными из базы данных. Если вы хотите обновить qtablewidget, вам нужно снова позвонить этому методу. Вы можете создать pushbutton и подключить его к contactsData(), поэтому, когда вы нажимаете эту кнопку, контакты перезагружаются из вашей базы данных, не выходя из программы.

Если вам нужно, чтобы это было сделано автоматически, вы можете создать таймер для вызова contactsData().

EDIT

просто добавьте эту строку в конце contactsData() метода:

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

будет перезагружать данные каждые 10 секунд

+1

Думал, что я понял, как это сделать. Оказывается, я этого не делал. Не могли бы вы помочь мне в том, как я буду создавать таймер для вызова contactsData(). Спасибо. – irunintotrees

+1

Nevermind. Я понял. Спасибо. – irunintotrees

+1

взгляните на EDIT в своем ответе – Aleksandar

Смежные вопросы