PyQt4:在setCentralWidget之后禁用删除小部件

时间:2012-02-02 13:48:25

标签: pyqt pyqt4 python-sip

我有两个自定义小部件(两个基于QtGui.QWidget的类)。在QtGui.QMainWindow的__init__中,我创建了他们的实例:

self.MyWidget1 = MyWidget1()
self.MyWidget2 = MyWidget2()

__init__部分还有两个按钮(QtGui.QPushButton),当用户点击每个按钮时,有两个按钮:

def clickButton1(self):
  self.setCentralWidget(self.MyWidget1)

def clickButton2(self):
  self.setCentralWidget(self.MyWidget2)

但它仅在第一次点击时起作用,然后PyQt说底层小部件(MyWidget1或MyWidget2)被删除了。我认为这是由 sip 模块完成的。有没有办法防止在重置中央窗口小部件后删除窗口小部件?谢谢!

1 个答案:

答案 0 :(得分:2)

我认为这几乎是不可能的。

来自setCentralWidget docs:

  

注意:QMainWindow取得小部件指针的所有权,并在适当的时候删除

因此,您应该创建新的MyWidget实例。

def clickButton2(self):
    self.setCentralWidget(MyWidget2())

但这样做的正确方法是使用QStackedWidget