2017-04-08 139 views
0

想法是,將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 

回答

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

對此有何解釋?它看起來並不像預期的那樣工作......

相關問題