QT消失了第二个窗口

时间:2017-12-05 15:20:34

标签: python qt

我是QT的新手,并使用QT 5在python中进行编程。我有一个主窗口但是当我尝试单击第二个窗口的按钮时,它显示但很快就消失了。有谁知道如何解决这个问题?

def SecondWindow():
    qw = QWidget()
    qw.resize(800, 800)
    qw.move(300, 300)
    qw.show()

1 个答案:

答案 0 :(得分:2)

Python与C ++不同:在后者中,代码可以按需运行,即使您泄漏了小部件。从技术上讲,我们不会泄漏小部件,因为它可以从QApplication::topLevelWidgets访问。

在Python中,qw完成后没有对SecondWindow的引用:它是一个局部变量。因此,小部件会立即被销毁,因为Python首先使用引用计数进行对象生命周期管理 - 而垃圾收集器只收集形成周期的对象,而这种情况并非如此。

解决方案是保留对您创建的小部件的引用:

class MyClass(QObject):
  @pyqtSlot()
  def second_windowClick(self):
     self.SecondWindow()

  def SecondWindow(self):
     qw = QWidget()
     qw.resize(800, 800)
     qw.move(300, 300)
     qw.show()
     self.qw = qw