用pyqt从另一个类修改列表框

-1 投票
1 回答
925 浏览
提问于 2025-04-18 17:57

我正在用PyQt和Python为一个数据库做图形界面(GUI)。主窗口(Window类)里有一个列表框,我把所有数据放在里面,这个例子里我放了“程序正在运行”。另外,还有一个窗口(AddWin类)帮助我往数据库里添加新客户,但我无法从AddWin类修改列表框。我在程序里有以下代码,我想从AddWin类清空列表框,你能帮我吗?或者我在下面的代码中有什么错误吗?

class Window(QtGui.QMainWindow):
    def __init__(self, parent=None):
        QtGui.QMainWindow.__init__(self, parent)
        #Listbox 
        self.lista = QtGui.QListWidget(self)
        self.lista.move(155,221)
        self.lista.resize(855,455)
        self.lista.addItem("The program is working")

class AddWin(QtGui.QDialog):
    def __init__(self, parent=None):
        QtGui.QDialog.__init__(self, parent)
        main = Window()
        main.lista.clear()

if __name__ == '__main__':

    import sys
    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())

1 个回答

1

你的错误在于,代码中没有创建 AddWin 的实例,所以 lista.clear 这个方法从来没有被调用过。

你可以通过把

window = Window()

改成

window = AddWin()

最后编辑于 2014年8月21日 12:42

如果你想把 QtGui.QListWidgetQtGui.QMainWindow 传递到 QtGui.QDialog,你可以通过引用的方式将值传递给 QtGui.QDialog

假设你的 QtGui.QMainWindow 必须包含 QtGui.QDialog(或者 AddWin);

class Window(QtGui.QMainWindow):
    def __init__(self, parent=None):
        QtGui.QMainWindow.__init__(self, parent)
        #Listbox 
        self.lista = QtGui.QListWidget(self)
        self.lista.move(155,221)
        self.lista.resize(855,455)
        self.lista.addItem("The program is working")
        self.myAddWin = AddWin(self.lista, self) # <- Pass QListWidget to your class

class AddWin(QtGui.QDialog):
    def __init__(self, refQListWidget, parent=None):
        QtGui.QDialog.__init__(self, parent)
        self.myRefQListWidget = refQListWidget
        self.myRefQListWidget.clear()

撰写回答