2017-04-08 4 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は単に空です。 setCentralWidgetwidgetQWidgetのコンストラクタに置き換えると、正しく表示されます。しかし、採用されたウィジェットではない。

私はここで何が欠けていますか?

更新:明らかにウィジェットは削除されています。そのラベルの1つの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)) 

これについての説明はありますか?これは意図したとおりに動作するようには見えません。

関連する問題