訊號與槽 是pyqt的精髓,要多總結學習一下
定義通俗解釋
事件源:狀態發生改變的物件,它產生事件 source_obj
按鈕(物件)
事件目標:是想要被通知的物件 target_obj
被點選(狀態發生改變)
事件物件:封裝了事件源中的狀態變化 evnet_obj
執行(呼叫函式)
def use(self):
print("觸發槽函式成功")
一般情況下 我們單擊button
按鈕
單擊按鈕後執行 按鈕背後繫結的槽
上面說到 單擊按鈕可以理解為 訊號的傳送 → 槽的觸發
如果拆分開來看,背後的整個執行過程:
訊號傳送
#訊號.emit()
觸發訊號 繫結的槽
#訊號.connect(self.槽函式)
執行槽函式
案例
'''
使用執行緒類(qthread)編寫計數器
qthread
def run(self):
while true:
self.sleep(1)
if sec == 5:
break;
qlcdnumber
workthread(qthread)
用到自定義訊號
'''import sys
from pyqt5.qtcore import *
from pyqt5.qtgui import *
from pyqt5.qtwidgets import *
sec = 0
class workthread(qthread):
timer = pyqtsignal() # 每隔1秒傳送一次訊號
end = pyqtsignal() # 計數完成後傳送一次訊號
def run(self):
while true:
self.sleep(1) # 休眠1秒
if sec == 5:
self.end.emit() # 傳送end訊號
break
self.timer.emit() # 傳送timer訊號
class counter(qwidget):
def __init__(self, parent=none):
super(counter, self).__init__(parent)
self.setwindowtitle("使用執行緒類(qthread)編寫計數器")
self.resize(300, 120)
layout = qvboxlayout()
self.lcdnumber = qlcdnumber()
layout.addwidget(self.lcdnumber)
button = qpushbutton('開始計數')
layout.addwidget(button)
self.workthread = workthread()
self.workthread.timer.connect(self.counttime)
self.workthread.end.connect(self.end)
button.clicked.connect(self.work)
self.setlayout(layout)
def counttime(self):
global sec
sec += 1
self.lcdnumber.display(sec)
def end(self):
qmessagebox.information(self,'訊息','計數結束',qmessagebox.ok)
def work(self):
self.workthread.start()
if __name__ == "__main__":
form = counter()
form.show()
參考: pyqt5 訊號與槽
描述self.obj.destroyed.connect destroy cao 觸發後會執行槽函式,並給槽函式返回釋放物件 self.obj.blocksignals true 臨時打斷訊號 self.obj.objectnamechanged.disconnect 斷開訊號與槽的連線 self....
Pyqt5 訊號與槽 一
ui介面如下 思路 按下對應按鍵顯示對應訊號文字。主要說自定義訊號,qt控制項自帶訊號就不說了。訊號定義需要呼叫庫 qobejcet,pyqtsignal from pyqt5.qtcore import qobject,pyqtsignal 類內部訊號與槽 class signal pyqtsig...
PyQt5訊號 槽機制
signal emit slot signal.connect slot signal.disconnect slot 訊號 singal 可以連線無數多個槽 slot 或者沒有連線槽也沒有問題,訊號也可以連線其他的訊號。連線的基本語句形式如下 who.singal.connect slot 訊號是...