self.log_box = qtextbrowser(
)def
job(self)
: output = os.popen(
'cd '
+ dir_path +
' && svn up '
+ dir_path)
# log_box新增日誌
self.log_box.settext(output.read())
self.scheduler = backgroundscheduler(
)self.scheduler.add_job(self.job,
'cron'
, day_of_week=week, hour=time.split(
':')[0
],minute=time.split(
':')[1
])self.scheduler.start(
)
backgroundscheduler定時器一旦啟動,程序將會在後台執行,不影響主線程,但是此時通過定時任務去操作qt模組,會失敗。job任務中,通過settext向qtextbrowser新增文字,會直接報錯,因為定時器和qt屬於不同執行緒。此時需要訊號槽來實現執行緒間通訊。
class
signaldef
(qobject)
: signal = pyqtsignal(
str)
訊號槽在建立的時候可以指定訊號型別,如果需要指定不同型別:
# 無引數的訊號
signal_noparameters = pqc.pyqtsignal(
)# 帶乙個引數(整數)的訊號
signal_oneparameter = pqc.pyqtsignal(
int)
# 帶乙個引數(整數或者字串)的過載版本的訊號
signal_oneparameter_overload = pqc.pyqtsignal(
[int],
[str])
# 帶兩個引數(整數,字串)的訊號
signal_twoparameters = pqc.pyqtsignal(
int,
str)
# 帶兩個引數([整數,整數]或者[整數,字串])的過載版本的訊號
signal_twoparameters_overload = pqc.pyqtsignal(
[int
,int],
[int
,str
])
self.signal.connect(self.signalcall)
connect後面連線的為接收到訊號後的觸發函式
def
job(self)
:# os.system('cd ' + dir_path + ' && svn up ' + dir_path)
output = os.popen(
'cd '
+ dir_path +
' && svn up '
+ dir_path)
# 發射訊號
self.signal.emit(output.read(
))
這裡調整一下之前的job函式,先將log通過emit()函式,傳遞訊號給槽函式signalcall(),然後通過槽函式來操作qt模組,設定qtextbrowser的文字,就可以成功。
def
signalcall
(self, log)
: self.log_box.settext(
str(log)
)
PyQt5 自定義訊號槽函式
1 簡介 自定義訊號槽函式,當訊號傳送的時候,可以呼叫被繫結的槽函式 2 功能實現 coding utf 8 簡介 內建訊號槽示例 from pyqt5.qtcore import qobject,pyqtsignal 訊號物件 class qtypesignal qobject 定義乙個訊號 se...
pyqt5 自定義訊號與槽
coding utf 8 from pyqt5.qt import a 0class window qwidget 宣告無引數的訊號 signal1 pyqtsignal 宣告帶乙個int型別引數的訊號 signal2 pyqtsignal int 宣告帶int和str型別引數的訊號 signal3...
PyQt5 自定義訊號槽 不同傳參
1 簡介 自定義的訊號 傳遞不同的引數 2 功能實現 coding utf 8 簡介 內建訊號槽訊號槽示例 from pyqt5.qtcore import qobject pyqtsignal class custsignal qobject 宣告乙個無引數的訊號 signal1 pyqtsign...