2014-07-21 4 views
0

Я создаю графический интерфейс для базы данных с pyqt. База данных кодируется в mysql. Кроме того, главное окно имеет QListWidget, который позволяет видеть данные базы данных через функцию обновления.Изменить список из другого класса

def update(self, bd1='',sql1=''): 
try: 
    cur = bd1.cursor() 
    cur.execute(sql1) 
    data = cur.fetchall() 
    #print data 
    for registro in data: 
     #Asignacion de registros a variables 
     n = registro[0] 
     LName= registro[1] 
     Name = registro[2] 
     ID = registro[3] 
     LName1= registro[4] 
     Name1 = registro[5] 
     ID1 = registro[6] 
     Tip = registro[7] 
     Cel = registro[8] 
     Tel1 = registro[9] 
     Tel2 = registro[10] 
     Email= registro[11] 
     City = registro[12] 

     print 'Entro' 
     #Colocacion de datos al listbox 
     self.list.addItem(LName + "," + " " + Name) 
     self.list.addItem("CC" + " " + ID) 

     #Arreglo Cel 
     if (Cel==None or LName1==None) or (Tel1==None and Tel2==None) or Email==None: 
      pass 

     elif Tel1!=None and Tel2==None: 
      self.list.addItem("Tel: " + Tel1) 
     elif Tel1==None and Tel2!=None: 
      print "Error Telefonos en la base de datos" 
     else: 
      self.list.addItem("Cel: " + Cel) 
      self.list.addItem(LName1 + "," + " " + Name1) 
      self.list.addItem("CC" + " " + ID1) 
      self.list.addItem("Tel: " + Tel1 + " - " + Tel2) 
      self.list.addItem("Email: " + Email) 

     #Arreglo Ciudad 
     if City==None: 
      self.list.addItem("Ciudad: " + "Bucaramanga") 
     else: 
      self.list.addItem("Ciudad: " + City)      

     #Arreglo Tipologia 
     if Tip==None: 
      self.list.addItem(" ") 
     else: 
      self.list.addItem("Tipologia: " + Tip + "\n") 


except: 
    print "Error en obtencion de datos" 
#Desconexion de la BD 
bd1.close() 

Кроме того, я создал еще один класс, который позволяет добавить нового пользователя, но когда я вызываю функцию «обновление», список не обновляется новыми данными. С другой стороны, я должен перезапустить программу для просмотра последних обновлений в базе данных. Что делать, чтобы не перезапускать программу и немедленно обновлять ее?

ответ

0

Если ваша другая функция, вам нужно позвонить update() в конец.

def add_user(): 
    # Code to add user to database 
    # remember to commit() 
    self.list.clear() 
    self.update(#appropriate parameters) 

Это очищает self.list виджет до вашего вызова обновления, в противном случае вы будете иметь появляются дублирующие данные. Когда вызывается self.update(), с соответствующими параметрами self.list будет заселен данными из вашего запроса.

Помните, что после добавления пользователя в базу данных обязательно зафиксируйте свои изменения. Если вы этого не сделаете, ваш update() не увидит информацию нового пользователя.

+0

Я сделал это, и появился mistige TraceBack (самый последний вызов последнего): Файл "pyqt2.py", строка 367, в Nuser self.list.clear() AttributeError: объект 'AddWin' не имеет атрибута ' list ' –

+0

Не self.list при вызове из другого класса: замените self тем, что вы назвали экземпляром (mainwindow, может быть?). – mdurant