我最近决定使用Python和PySide编写我的第一个应用程序。但我有一个问题,希望你们能帮忙。
Python不断提出删除“内部C ++对象”的异常。根据我对Python的有限经验,我认为我的对象超出范围并被Python的垃圾收集器删除。
那么我将如何使用PySide在Python中设计多页面应用程序。并且能够保留我的QWidgets,以便我可以再次显示页面。
感谢您的时间。
更新(代码)
instancing = None
def instance():
global instancing
if instancing == None:
instancing = WPZKernel()
return instancing
class WPZKernel:
win = None
mainscreen = None
def mainwindow(self):
if self.win == None:
self.win = GMKMainWindow(self)
return self.win
def main_panel(self):
if self.mainscreen == None:
self.mainscreen = GMKMainScreen(self.mainwindow())
return self.mainscreen
我通常会通过调用
来访问主面板import kernel
kernel.instance().main_panel()
我是不是以错误的方式解决这个问题?
答案 0 :(得分:12)
经过一番搜索和拔毛后,我找到了解决方案。我通过将它们设置为中央窗口小部件来显示所有页面,并且在阅读QMainWindow documentation时,我发现我的窗口小部件基本上被qt删除,如上所述:
注意:QMainWindow拥有 小部件指针并删除它 适当的时间。
所以要开发一个多页面应用程序,而不是看看QStackedWidget。
答案 1 :(得分:8)
见这里:PySide Pitfalls。
如果QObject超出范围 Python,它将被删除。你有 照顾好参考 对象:
- 将其存储为您保留的对象的属性,例如 self.window = QMainWindow()
- 将父QObject传递给对象的构造函数,因此它被拥有 由父母