L'idée est, de faire apparaître un QWidget
dans son propre QMainWindow
. Auparavant, c'est le widget central de la fenêtre A, et après A doit avoir un widget de remplissage, une nouvelle fenêtre B est engendrée avec le widget comme son propre widget central.Déplacer QWidget d'une fenêtre à l'autre (en PyQt)
Alors, voici la configuration:
class DetachedWindow(QtWidgets.QMainWindow):
def __init__(self, window: "MyMainWindow", widget: QtWidgets.QWidget = None, *args):
QtWidgets.QMainWindow.__init__(self, *args)
self.main_window = window
window.set_widget(EmptyWidget(), False) # sets new filler central widget
if widget is not None:
self.setCentralWidget(widget)
widget.setParent(self)
self.show()
class MyMainWindow(QtWidgets.QMainWindow):
# ...
def detach_screen(self):
self.windows.append(DetachedWindow(self, self.current_widget))
Mais quand je l'essaie, le DetachedWindow
est tout simplement vide. Lorsque je remplace widget
dans setCentralWidget
avec le constructeur d'un QWidget
, il s'affiche correctement. Mais pas avec le widget adopté.
Qu'est-ce qui me manque ici?
Mise à jour: Apparemment, le widget est supprimé. Lorsque vous accédez à la fonction setText
d'un de ses étiquettes, l'erreur suivante se produit:
RuntimeError: wrapped C/C++ object of type QLabel has been deleted