2

多くのウィジェットやさまざまなウィンドウなどを備えた PyQt でプログラムされた GUI があります。GUI のデータは python オブジェクトに保存されます。このオブジェクトは、プログラム内のすべてのウィジェットからアクセスできる必要があります。このオブジェクトはどこに配置すればよいですか?

現在、プログラムのメインウィンドウに使用される QMainWindow インスタンスにそれがあります。問題は、深くネストされたウィジェットから QMainWindow オブジェクトに到達するのが難しいことです。QtCore.QCoreApplication.instance() で取得できるため、そのために QApplication インスタンスを使用する方がはるかに簡単に思えます (この回答に示されているように)。しかし、QApplication クラスを変更するように勧める例は他に見当たりませんでした。

どのようなアプローチをお勧めしますか?

4

1 に答える 1

1

正しいアプローチは、このデータ/設定オブジェクトを別のモジュールに配置することです。これは、必要な場所に簡単にインポートできます。理想的には、モジュール (およびデータ/設定オブジェクトを作成するコード) は、アプリケーションの残りの部分から大きく独立している必要があります。

データ/設定オブジェクトをアプリケーション インスタンスに結び付けても、実際には何の価値もありません。インポートするかQApplicationqAppとにかくアクセスする必要があるからです。そして、同じことが にも当てはまりますQMainWindow- 問題を別の場所に移動させ、不要な間接レイヤーを追加するだけです。このアプローチのもう 1 つの大きな問題は、アプリケーションまたはメイン ウィンドウのインスタンスが使用可能になるまで、データ/設定オブジェクトにアクセスできないことです。多くの場合、アプリケーションのさまざまな部分の初期化中にデータ/設定オブジェクトが必要になるため、特定の GUI 要素に関連付けると、循環依存関係やその他の順序付けの問題が発生しやすくなります。

ここでの重要な設計原則はLoose Couplingだと思います。データ/設定オブジェクトを GUI から切り離すと、アプリケーションの残りの部分は必要なときにいつでもどこでもアクセスできます。

于 2017-12-07T18:13:06.177 に答える