PyQt4: отключить удаление виджета после setCentralWidget - PullRequest
1 голос
/ 02 февраля 2012

У меня есть два пользовательских виджета (два класса на основе QtGui.QWidget).В __init__ QtGui.QMainWindow я создаю их экземпляры:

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 Ответ

2 голосов
/ 02 февраля 2012

Я думаю, что это почти невозможно.

С setCentralWidget документы:

Примечание: QMainWindow становится владельцем указателя на виджет и удаляет в соответствующее время.

Итак, вы должны создать новый экземпляр MyWidget.

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

Но правильный способ сделать это - использовать QStackedWidget

...