【问题标题】: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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-14
    • 2011-01-25
    相关资源
    最近更新 更多