2017-01-17 23 views
0

ようこそ!ウィジェットのレイアウトを変更するpyqt

私はPyQTを使って自分のGUIアプリケーションを作成しようとしています。メインウィンドウは、メニューバー、ステータスバー、セントラルウィジェットで構成されています。中央ウィジェットはQTabWidgetです。各タブには独自の職場ウィジェットがあります。

プログラム自体でOpenFOAMステージのpiplineを作成し、各プロセスのオプションを設定して起動することができます。タブ内の唯一のウィジェットである1つのウィジェットですべてが作成されます。

私が遭遇した問題は、QLayoutに接続されています。私はQHBoxLayoutQVBoxLayoutの組み合わせを使ってタスクを起動しています。私が最初に作るときself.setLayout(somelayout1)それは正常に動作します。しかし、このウィジェットのクラスself.setLayout(somelayout2)self.setLayout(somelayout3)などのさまざまなメソッドで次のステップを実行すると、新しいレイアウトがすべての以前のレイアウトの上に描画されます。これ以上:新しいレイヤーでカバーされていない以前のレイアウトのすべてのレイヤー部分はアクティブなままです!

ウィジェットの古いレイアウトを無効にする方法はありませんでした。それを削除してください。すでにでも1つの要素のレイアウトコンテナを作成し、self.layout().removeItem(0)self.layout().setLayout(newlayout)(または.inserLayout(newlayout)でそれに影響を与える試みたが、違いはありません。

に古いものを表示せず、ウィジェットのレイアウトを変更するには、任意の加工方法はあります裏側任意の助け

おかげ

PS:?。self.setStyleSheet("QWidget { background-color: rgb(255, 255, 255) }") どちらQObjectCleanupHandler().add(self.layout())両方を何の効果をしない古いレイアウトから削除するウィジェットを確保するために

+1

[QStackedWidget](https://doc.qt.io/qt-5/qstackedwidget.html)。 – ekhumoro

+0

@ekhumoro私はそれを試して、返事を残す、ありがとう! – Amphyby

+1

PS:レイアウトとそのすべてのウィジェットを削除するには、[この回答](http://stackoverflow.com/a/9383780/984421)を参照してください。 – ekhumoro

答えて

1

方法はUSIです。 ng sip.delete(somewidget)。これにより、C++オブジェクト自体が削除されることがあります(それ自体が存在することもあります)。

関連する問題