簡體   English   中英

將QWidget從一個窗口移動到另一個窗口(在PyQt中)

[英]Move QWidget from one window to another (in PyQt)

這個想法是,將QWidget彈出到自己的QMainWindow 之前它是窗口A的中央窗口小部件,之后A應該具有填充器窗口小部件,會產生一個新窗口B,並將窗口小部件作為其自己的中心窗口小部件。

所以這是設置:

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))

有什么解釋嗎? 看來這似乎並沒有按預期工作...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM