2016-09-09 1 views
0

外部ユーザーに使いやすくするためのGUIラッパー(PyQt4)を作成したスクリプトがあります。私は、これを反映するためにPyQt要素を更新しながら、スクリプトの特定の段階(例えば、実行中、失敗、待機中など)の状態を監視したいと思います。理想的には、PyQt4がインストールされていない場所で実行する場所の多くに、オリジナルのスクリプトを変更してエミットやシグナルを組み込むことは望ましくありません。これは可能ですか?元のスクリプトでemitを使わずにスクリプトラッパーでPyQt要素を更新するには

+0

、PyQtは、スクリプトを分離し、私はちょうど信号 – danidee

+0

それをインポートいくつかのコードを投稿するあなたの投稿を読んでいる皆さんには本当に明確になります。どうぞ – user3601503

+0

せずに変数やメソッドの状態のPyQtは「を知らせる」する方法の全くわからないんだけど、ことを行っている – danidee

答えて

0

それが信号を発するための独自のシステムを記述するために十分に簡単です:

from collections import defaultdict 

slots = defaultdict(list) 

def connect(signal, slot): 
    slots[signal].append(slot) 

def disconnect(signal, slot=None): 
    if slot is not None: 
     slots[signal] = [x for x in slots[signal] if x is not slot] 
    else: 
     del slots[signal][:] 

def emit(signal, *args): 
    for slot in slots[signal]: 
     slot(*args) 

... 

emit('statusChanged', 'Failed', 'error message') 

、必要に応じて今すぐあなたのPyQt4ラッパーは、これらの信号に接続することができますし、直接それらを処理、または再放射する適切なPyQtは信号:

輸入はどこのために作られたものだ
import myscript 

class MainWindow(QtGui.QMainWindow): 
    statusChanged = QtCore.pyqtSignal(str, str) 

    def __init__(self): 
     super(MainWindow, self).__init__() 
     myscript.connect('statusChanged', self.handleStatusChanged) 

    def handleStatusChanged(self, status, message): 
     print(status, message) 
     self.statusChanged.emit(status, message) 
関連する問題