Python PySide(内部c ++对象已被删除)

时间:2011-03-17 12:34:46

标签: python pyside

我最近决定使用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()

我是不是以错误的方式解决这个问题?

2 个答案:

答案 0 :(得分:12)

经过一番搜索和拔毛后,我找到了解决方案。我通过将它们设置为中央窗口小部件来显示所有页面,并且在阅读QMainWindow documentation时,我发现我的窗口小部件基本上被qt删除,如上所述:

  

注意:QMainWindow拥有   小部件指针并删除它   适当的时间。

所以要开发一个多页面应用程序,而不是看看QStackedWidget

答案 1 :(得分:8)

见这里:PySide Pitfalls

  

如果QObject超出范围   Python,它将被删除。你有   照顾好参考   对象:

     
      
  • 将其存储为您保留的对象的属性,例如   self.window = QMainWindow()
  •   
  • 将父QObject传递给对象的构造函数,因此它被拥有   由父母
  •