我是QT的新手,并使用QT 5在python中进行编程。我有一个主窗口但是当我尝试单击第二个窗口的按钮时,它显示但很快就消失了。有谁知道如何解决这个问题?
def SecondWindow():
qw = QWidget()
qw.resize(800, 800)
qw.move(300, 300)
qw.show()
答案 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