Python 第二个窗口

Python 第二个窗口,python,qt,Python,Qt,我不熟悉QT,并使用Qt5进行python编程。我有一个主窗口,但当我尝试单击第二个窗口的按钮时,它会显示,但很快就会消失。有人知道我如何解决这个问题吗 def SecondWindow(): qw = QWidget() qw.resize(800, 800) qw.move(300, 300) qw.show() Python与C++不同:在后者中,即使您泄漏了小部件,代码也能按预期工作。从技术上讲,我们不会泄漏小部件,因为它可以从QApplication:

我不熟悉QT,并使用Qt5进行python编程。我有一个主窗口,但当我尝试单击第二个窗口的按钮时,它会显示,但很快就会消失。有人知道我如何解决这个问题吗

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

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

在Python中,
SecondWindow
完成后,没有对
qw
的引用:它是一个局部变量。因此,小部件会立即被销毁,因为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

显示一个..将
qw
更改为
self.qw
:垃圾收集器和
def SecondWindow()
更改为
def SecondWindow()
,将
SecondWindow()
更改为
self.SecondWindow()
在函数中创建的变量仅在调用函数时存在,因此,在您的情况下,qw将仅在调用SecondWindow期间存在,然后它将被删除,因此该窗口将被删除。谢谢您的建议。但是,我收到一个:文件“app.py”,第40行,在第二个窗口单击self.SecondWindow()AttributeError:“bool”对象没有属性“SecondWindow”中止陷阱:6@DerrickJones以上两个函数都是方法。他们属于同一个班级!我已经说得很清楚了。