pyqt5 訊號與槽

2022-03-29 05:01:27 字數 2228 閱讀 4748

訊號與槽 是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 訊號是...