質問: value ``` これでaの共有ができないかと考えたのですが、B側でAのインスタンスを作っても同じIDにはならなかったので、うまくいきませんでした。 ### 条件 ### その他 PyQt5で画面を作成しています。 その際、プログレスバーをダイアログ画面で表示して、その中に1つのラベルとプログレスバーを表示します。 ラベルには、現在の作業内容を表示します。 作業は、関数内で行います。 ラベル内容の変更は、その処理の関数の行に入る直前に変更します。 処理をクラスごとに分ける関係で、プログレスバーの画面を表示・実行した場所とは別のクラス(ファイル)でラベルの変更を行うこともあります。 このパターンを行う際に、今回の質問内容がほしくなりました。 サンプルが用意できなかったことと、変数の共有等の初歩的な可能性が高いと思い、今回はこのような形の質問方法にしました。 --- Javaの場合、static等を使えば似たようなことができたと思うのですが、Pythonでは再現できないということでしょうか。 以上です
回答: このように利用する側のクラスに利用される側のオブジェクトを渡すしかないです。 ``` class A: def __init__(self): self.a = 'hoge' class B: def __init__(self, A): self.A = A def process(self): self.A.a = 'fuga' objA = A() objB = B(objA) print(objA.a) # hoge objB.process() print(objA.a) # fuga ``` > > 処理をクラスごとに分ける関係で、プログレスバーの画面を表示・実行した場所とは別のクラス(ファイル)でラベルの変更を行うこともあります。 > > このパターンを行う際に、今回の質問内容がほしくなりました。 > > > Qt でプログレスバーの更新を行うなら、シグナルスロットを使いましょう。 進捗が変化した際に発呼するシグナルを処理用のクラスに作成し、QProgressBar の setValue() 関数に connect します。 connect はメイン関数側で行います。 そうすれば、作業を行うクラスからプログレスバーを直接いじる必要がなくなります。