0
我有一個腳本,我已經寫了一個gui包裝器(在PyQt4中),使外部用戶更容易使用。我想監視腳本某些階段的狀態(例如運行,失敗,等待等),同時更新PyQt元素以反映這一點。理想情況下,我不想修改原始腳本以包含發射或信號,因爲我運行它的很多地方都沒有安裝PyQt4。這可能嗎?如何更新腳本包裝器中的PyQt元素而不使用原始腳本中的發射
我有一個腳本,我已經寫了一個gui包裝器(在PyQt4中),使外部用戶更容易使用。我想監視腳本某些階段的狀態(例如運行,失敗,等待等),同時更新PyQt元素以反映這一點。理想情況下,我不想修改原始腳本以包含發射或信號,因爲我運行它的很多地方都沒有安裝PyQt4。這可能嗎?如何更新腳本包裝器中的PyQt元素而不使用原始腳本中的發射
這是很容易編寫自己的用於發射信號的系統:
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)
這就是其中對於國產進口,從PyQt的分離腳本並導入 – danidee
我這樣做,我只是不完全確定如何「通知」的PyQt的變量或方法的狀態沒有信號 – user3601503
張貼一些代碼會真的讓每個人都明白你的帖子。請做那個 – danidee