【问题标题】:PyQt4, Generating multiple Instances of the same widget?PyQt4,生成同一个小部件的多个实例?
【发布时间】:2014-08-16 15:46:51
【问题描述】:
我正在创建一个 PyQt4 gui,它允许用户在 qmainwindow 中输入一些初始参数,然后单击开始按钮开始一个程序。当他们单击开始按钮时,将出现一个显示参数的新窗口,程序开始。我希望用户能够启动程序的多个实例。但是,当qmainwindow中的参数发生变化,第二次点击启动按钮时,第一个程序窗口就消失了。
有没有办法让开始按钮调用与第一个窗口同时运行的第二个窗口?我想这类似于线程,但从我读过的内容来看,PyQt4 似乎没有在应用程序中进行线程的方法。
任何帮助将不胜感激。
【问题讨论】:
标签:
python
multithreading
pyqt
pyqt4
【解决方案1】:
我猜你正在将新创建的窗口的引用保存在同一个变量中。如果要创建多个窗口,请尝试将对该窗口的引用保存在单独的变量中,即每个窗口都应该有自己的引用变量。
def showWindow(self):
self.child = Window(self)
self.child.show()
如果这是您的情况,第一个窗口将在第二次 showWindow() 执行时失去它的引用。因为self.child会包含对第二个窗口的引用,导致关闭第一个窗口,因为第一个窗口没有引用引用。一旦小部件在 Qt 中失去引用,小部件就会被销毁。为了克服这个问题,维护一个变量列表:
# declare a list in __init__ as self.widgetList = []
def showWindow(self):
win = Window(self):
win.show()
self.widgetList.append(win)