2012-01-03 7 views
0

4つのタブ(今は8)を実装していたこのソフトウェアを書きました。さて、すべてのタブは、独自のQThreadと1つの一般的なGUIスレッドです。ワーカースレッド(タブスレッド)は、更新が必要なときにGUIスレッドにデータを戻します。たとえば、GUIスレッドにstatusBarテキストがあり、ワーカースレッドが何かを行うたびに更新する必要があります。私はそのためSIGNAL/SLOTを使用している、と私は、着信信号を検出する方法は、このようなものです:Pythonでモジュールを検出する(GUIスレッドにデータを送信する)

def setStatus(self, status): 
    #Defining SIGNAL sender 
    self.sender = QObject().sender()   
    if "module1" in str(self.sender): 
     self.module1CurrentStatus.setText(status) 

さて、この作品とすべてが、ソフトウェアは、に4つのタブを実装するから成長してきた、私が言ったように8つのタブを実装します。 sender()を使用する代わりに、これを実装するより良い方法はありますか?私は単に、すべてのモジュールに対して一度だけ書くことができる何かを探しています。これは、GUIがSIGNALがどのスレッドから自動的に取得されたかを知る方法です。私はモジュールごとに別々の信号を書くことができることを知っていますが、私はそれで何も達成しません。

+0

私はおそらく何かここに不足しています。ステータスを設定するために、この中間関数の代わりにスレッドからの信号を適切なウィジェットの 'setText'に接続するのはなぜですか? – Avaris

+0

@Avaris私は非GUI(ワーカー)スレッドでsetText関数を使用できないためです。 –

+0

まだ...メイン(GUI)スレッドでそれらを接続します。この 'setStatus'メソッドはありますか?そして、あなたはあなたのワーカースレッドをメインスレッドに作成しますね。それらを 'setStatus'に接続することができれば、それらを' module1CurrentStatus.setText'にも接続することができます。適切なコンテキストを提供するためにコードを共有する方が良いかもしれません。 – Avaris

答えて

-1

モジュール名は、スクリプトとして実行されているファイルでない限り、__name__で取得できます。

+0

その場合は、QSenderを__name__に置き換えて、何もしません。 –

0

お客様の要件を正しく理解している場合は、QSignalMapperを使用して、識別子で信号を再放出することができます。

関連する問題