将QWidget从一个窗口移动到另一个窗口(在PyQt中)

时间:2017-04-08 10:44:50

标签: python qt pyqt qt5 qwidget

我们的想法是,将Actual Result: Column3 Column4 Column5 Column1 Column2 Expected Result: Column1 Column2 Column3 Column4 Column5 放入自己的QWidget。事先它是窗口A的中心窗口小部件,之后A应该有一个填充窗口小部件,新窗口B产生,窗口小部件作为自己的中心窗口小部件。

所以这是设置:

QMainWindow

但是当我尝试时,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的构造函数替换widget中的setCentralWidget时,它会正确显示。但不是采用小部件。

我在这里缺少什么?

更新:显然删除了小部件。访问其中一个标签的QWidget功能时,会发生以下错误:

setText

1 个答案:

答案 0 :(得分:0)

我不知道为什么,但之后调用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))

对此有何解释?它似乎并不像预期的那样......