Python 第二个窗口
我不熟悉QT,并使用Qt5进行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:
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以上两个函数都是方法。他们属于同一个班级!我已经说得很清楚了。