2016-09-09 16 views
0

我有一個腳本,我已經寫了一個gui包裝器(在PyQt4中),使外部用戶更容易使用。我想監視腳本某些階段的狀態(例如運行,失敗,等待等),同時更新PyQt元素以反映這一點。理想情況下,我不想修改原始腳本以包含發射或信號,因爲我運行它的很多地方都沒有安裝PyQt4。這可能嗎?如何更新腳本包裝器中的PyQt元素而不使用原始腳本中的發射

+0

這就是其中對於國產進口,從PyQt的分離腳本並導入 – danidee

+0

我這樣做,我只是不完全確定如何「通知」的PyQt的變量或方法的狀態沒有信號 – user3601503

+0

張貼一些代碼會真的讓每個人都明白你的帖子。請做那個 – 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)