【问题标题】:Modify a listbox from other class修改其他类的列表框
【发布时间】:2014-09-12 02:28:43
【问题描述】:

我正在使用 pyqt 为数据库制作 GUI。数据库在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() 

此外,我创建了另一个允许添加新用户的类,但是当我调用函数“更新”时,列表不会使用新数据进行更新。另一方面,我必须重新启动程序以查看数据库中的最新更新。应该怎么做才能避免重新启动程序并立即更新?

【问题讨论】:

    标签: python mysql pyqt qlistwidget


    【解决方案1】:

    如果你的其他功能,你需要在最后调用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() 将看不到新用户的信息。

    【讨论】:

    • 我做到了,并出现了一个错误的 Traceback(最近一次调用最后):文件“pyqt2.py”,第 367 行,在 nuser self.list.clear() AttributeError: 'AddWin' object has no属性“列表”
    • 从另一个类调用时不是 self.list:将 self 替换为您命名实例的任何名称(可能是主窗口?)。
    猜你喜欢
    • 1970-01-01
    • 2018-09-06
    • 2011-01-10
    • 1970-01-01
    • 2020-02-18
    • 1970-01-01
    • 2013-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多