Bri*_*ian 14 garbage-collection pyqt pyqt4 qobject qmainwindow
如果我运行此代码:
    #!/usr/local/bin/    python3
import sys 
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class Window(QMainWindow):
    def __init__(self):
        super().__init__()
        self.button1 = QPushButton("1")
        self.button2 = QPushButton("2")
        self.setCentralWidget(self.button1)
        self.button1.clicked.connect(lambda: self.setCentralWidget(self.button2))
        self.button2.clicked.connect(lambda: self.setCentralWidget(self.button1))
        self.show()
if __name__ == '__main__':
    import sys 
    app = QApplication(sys.argv)
    window = Window()
    sys.exit(app.exec_())
...我得到这个输出:
Traceback (most recent call last):
  File "test.py", line 16, in <lambda>
    self.button2.clicked.connect(lambda: self.setCentralWidget(self.button1))
RuntimeError: wrapped C/C++ object of type QPushButton has been deleted
我不明白为什么要删除该对象.窗口应该保持对它的引用.我已经彻底调查了这些帖子: 了解"基础C/C++对象已被删除"错误是否 可以查询PyQt4 QObject以确定底层C++实例是否已被销毁?
为什么按钮被删除?
Bri*_*ian 14
这个问题的答案如下所示: Python PySide(内部c ++对象已被删除)
显然,使用setCentralWidget将一个窗口小部件分配给QMainWindow,然后使用setCentralWidget分配另一个窗口小部件将导致删除基础c ++ QWidget,即使我有一个维护对它的引用的对象.
注意:QMainWindow获取小部件指针的所有权并在适当的时候删除它.
| 归档时间: | 
 | 
| 查看次数: | 18053 次 | 
| 最近记录: |