将QWidget从一个窗口移动到另一个窗口(在PyQt中)
问题描述:
想法是,将QWidget
弹出到它自己的QMainWindow
中。事先它是窗口A的中心部件,然后A应该有一个填充部件,一个新的窗口B与部件一起产生作为它自己的中心部件。将QWidget从一个窗口移动到另一个窗口(在PyQt中)
因此,这里的设置:
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))
但是当我尝试吧,DetachedWindow
就是空的。当我用QWidget
的构造函数替换setCentralWidget
中的widget
时,它会正确显示。但不是采用小部件。
我在这里错过了什么?
更新:显然小部件被删除。当访问它的标签之一的setText
功能时,会出现以下错误:
RuntimeError: wrapped C/C++ object of type QLabel has been deleted
答
我不知道为什么,但调用widget.show()
事后解决问题。
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
self.show()
if widget is not None:
self.setCentralWidget(widget)
widget.setParent(self)
widget.show()
class MyMainWindow(QtWidgets.QMainWindow):
# ...
def detach_screen(self):
self.windows.append(DetachedWindow(self, self.current_widget))
对此有何解释?它看起来并不像预期的那样工作......