2014-11-30 4 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

이없는 10 초마다 다시로드됩니다. 함수가 실제로 실행되고 데이터 행 수가 실제로 변경되는지 확인하려면 인쇄물을 추가하십시오. – Photon

+0

감사합니다. 그 일을 어떻게 진행하는지에 대한 힌트를 줄 수 있습니까? 무엇을 인쇄하고 어디에서 인쇄 기능을 넣을 것입니까? 죄송 합니다만 그건 바보 같은 질문입니다. 나는 조금 혼란스러워. – irunintotrees

+0

'self.contactsTableWidget.setRowCount (rowcount)''print '와 같은 것을 추가하기 전에 rowcount를 {} ". format (rowcount)'에 설정하십시오. 함수가 호출되고 새로운 행 수를 설정하는 것으로 나타납니다. 인쇄물이 보이지 않거나 번호가 변경되지 않으면 문제가 다른 곳에서 발생한다는 것을 알 수 있습니다. 다행히도 그럴 것입니다. – Photon

답변

1

당신은 한 번 contactsData() 전화를 감사하고, 데이터베이스의 데이터로 qtablewidget을 채 웁니다. qtablewidget을 새로 고치려면 해당 메소드를 다시 호출해야합니다. pushbutton을 작성하여 contactsData()에 연결할 수 있으므로 해당 버튼을 누르면 프로그램을 종료하지 않고도 데이터베이스에서 연락처가 다시로드됩니다.

자동으로 수행해야하는 경우 contactsData()으로 전화를 걸 수있는 타이머를 만들 수 있습니다.

편집

contactsData() 방법의 끝에 다음 행을 추가 :

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

는 데이터 뭔가처럼 보이지 않는

+1

생각하는 방법에 대해 알아 냈습니다. 내가 알지 못했던 것으로 밝혀졌습니다. contactsData()를 호출하는 타이머를 만드는 방법에 대해 알려주십시오. 고맙습니다. – irunintotrees

+1

신경 쓰지 마세요. 나는 그것을 알아. 정말 고마워. – irunintotrees

+1

제 대답에 편집 해보세요 – Aleksandar

관련 문제