2017-12-07 7 views
2

私はGUIが多くのウィジェットと異なるウィンドウなどでPyQtでプログラムされています.GUIのデータはPythonオブジェクトに格納されています。このオブジェクトは、プログラムのすべてのウィジェットから到達可能である必要があります。このオブジェクトをどこに置くべきですか?PyQtアプリケーションでの共通データオブジェクトへのアクセス

今私は、プログラムのメインウィンドウに使用されているQMainWindowインスタンスに持っています。問題は、深くネストされたウィジェットからQMainWindowオブジェクトに到達することは難しいということです。これは、QtCore.QCoreApplication.instance()(これはanswerのように)で取得できるので、QApplicationインスタンスを使用するほうがはるかに簡単です。しかし、私はQApplicationクラスを変更するよう促す他の例は見つけられませんでしたので、本当にそのように使うべきかどうか疑問です。

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

+1

単純なGUIの場合、QMainWindow内にデータを格納するだけで十分です( 'QWidget.window()'でアクセスするだけで十分です)。ほとんどのプログラムは1つのメインウィンドウといくつかのダイアログ(親ウィンドウのメインウィンドウへの参照を持っている)を持っているだけなので、それ以上の例が見つからない理由を説明するかもしれません。 もう1つのアプローチは 'QSettings'を使用しているかもしれませんが、実際のプログラム設定を保存する必要がある場合、これは良い解決策ではありません。 私は 'QCoreApplication.instance'システムを使います。 – musicamante

答えて

1

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

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

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

関連する問題