私のpythonアプリケーションは、さまざまな別々の処理アルゴリズム/モジュールを1つの(Py)Qt GUI内で組み合わせて構成されています。インポートされたモジュール内での外部クラスメソッドの使用
すべての処理アルゴリズムは、独自のモジュール内にあり、GUIエレメントを使用するすべての通信は、メインモジュール内の単一クラス内で実装されます。 特に、このGUIクラスには、選択したアルゴリズムの現在の処理の進行状況を表すプログレスバー(QProgressBar)オブジェクトがあります。 このオブジェクトは.setValue()
メソッド(self.dlg.progressBar.setValue(int)
)を持っています。
self.dlg.progressBar.setValue()
は、インポートされた処理モジュール内でクラスメソッドであるため、進捗状況を独自のコードで報告することができないという問題があります。
私が見つけた唯一の回避策は、各処理モジュールの定義に変数progressbar
を追加し、self.dlg.progressBar
をメインモジュール内に渡してから、処理モジュール内で盲目的にprogressbar.setValue(%some_processing_var%)
を呼び出します。
これは、インポートされたモジュール内で外部クラスメソッドを使用する唯一の方法ですか、それとも良い方法がありますか?
私はアイデアを得ていると思うが、まだあります
は、あなたのモジュールでコールバックを呼び出します私が理解していないことはほとんどありません。 ** 1。 Main(GUI)モジュール:** a)GUIクラス内で 'progress_callback'を定義する必要がある場合、定義に' self'がないのはなぜですか? b)メインコードのどこに登録陳述書を置く必要がありますか? ** 2。処理モジュール:** a)処理関数内で、または別のメソッドとして 'publish_progress'を定義する必要がありますか? b)あなたの種類の返答に基づいて、すべての実際の作業は 'progress_callback'によって行われます。これはメインモジュールからインポートします。では、この 'publish_progress'メソッドは何をすべきですか? – Vasily
@Vasily ** 1.a:**いいえ、 'progress_callback'は' Main'クラスの_method_ではありません。代わりに、mainメソッドの1つの中で定義できるローカル関数です。 ** 1.b:**登録ステートメントは、UI初期化の直後(または他のどこか)にある可能性があります。 ** 2.a:**処理クラスのメソッドである可能性があります。 (またはそのモジュールの機能)。 ** 2.b:** 'publish_progress'は単なるレジスタ関数/メソッドであり、他には何もしません。まだ不明な点がある場合は、お気軽にお問い合わせください。 –
@Vasilyこのアプローチは、コールバックパターンの一種です。 [Wikipediaで確認してください](https://en.wikipedia.org/wiki/Callback_(computer_programming))。 –