PyQt5 訊號與槽用法入門

2022-05-06 14:03:12 字數 3900 閱讀 4281

——學習《pyqt5快速開發與實戰》的筆記

1.1 signal、slot都繼承自 qtcore

1.2 signal與slot 可以 1對1,1對n,n對1,n對n

1.3 signal可以帶引數,引數可以是python任意型別,str,num(int\float),bool,date,list,dict,tuple)

1.4 qobject.signal.connect(slot),連線

1.5 signal和slot可以是同步,也可以是非同步(不懂)

1.6 可以跨執行緒

1.7 有可能會斷開

核心使用語句:

控制項:訊號需要跟控制項繫結

signal:有內建和自定義兩種方式

操作方法:connect、disconnect、emit

slot:有內建和自定義兩種方式

from pyqt5.qtcore import

pyqtsignal

from pyqt5.qtwidgets import

qmainwindow

class

window(qmainwindow):

#直接在控制項裡面寫乙個訊號變數,是類的全域性變數

btnclicked = pyqtsignal() #

無引數訊號

qobject.signal.connect(slot[, type=pyqt5.qtcore.qtautoconnection[,no_reviver_check=false]])  #

slot - 要連線的那個槽函式,或者是另外乙個訊號

#type - 連線的型別,這個一時半會還用不到,

#no_revicer_check - 不讓底層的c++接收器例項保持存在並且傳遞訊號,預設狀態是false,那就是要保持存在並且傳遞訊號

qobject.signal.disconnect(slot)  #

slot - 要斷開連線的槽函式

qobject.signal.emit(*args)  #

*args 可變引數,什麼型別可以接受

三種方式:

3.1 內建訊號與槽

3.2 自定義訊號與槽

3.3 裝飾器訊號與槽(1的衍生,先不管)

3.1 內建訊號與槽

#

3.1 內建訊號和槽的使用

from pyqt5.qtwidgets import

from pyqt5.qtwidgets import

qmessagebox

import

syswidget =qwidget()

defshowmsg():

qmessagebox.information(widget,

'訊號提示框

','ok,彈出測試資訊')

if__name__ == '

__main__':

btn = qpushbutton('

測試點選按鈕

',widget)

btn.clicked.connect(showmsg)

#clicked 內建訊號方法 showmsg 槽函式名稱,作為索引

widget.show()

3.2 自定義訊號與槽的使用

#

3.2 自定義訊號與槽的使用

from pyqt5.qtcore import

qobject, pyqtsignal

#自定義的訊號物件

class

q_type_signal( qobject):

#定義訊號

sendmsg =pyqtsignal(object)

def__init__

(self):

super(q_type_signal, self).

__init__

()

defrun(self,send_msg):

#發射訊號

self.sendmsg.emit(send_msg)

#send_msg 就是下面槽函式 get() 接受的 msg變數

class

q_type_slot( qobject):

def__init__

(self):

super(q_type_slot, self).

__init__

()

defget(self,msg):

print('

qslot get msg:

'+msg)

if__name__ == '

__main__':

send =q_type_signal()

slot =q_type_slot()

send.sendmsg.connect(slot.get)

send.run(

'hahaha

')

動作分解:

執行結果:

上面執行的是帶有乙個引數的訊號傳遞,兩個訊號也是一樣,只需要新增變數即可:

def

run(self,send_msg,send_int):

#發射訊號

self.sendmsg.emit(send_msg, send_int)

defget(self,msg,int):

print('

qslot get msg:

'+ msg + int)

3.3 自定義訊號與自定義槽

from pyqt5.qtwidgets import *

from pyqt5.qtcore import

pyqtsignal

import

sysclass

winform(qwidget):

#自定義訊號,不帶引數

btn_clicked_signal =pyqtsignal()

def__init__(self, parent=none):

super().

__init__

(parent)

self.setwindowtitle(

'自定義訊號/內建槽示例')

self.resize(200, 50)

btn = qpushbutton('關閉'

, self)

#連線訊號與槽1

btn.clicked.connect(self.btn_clicked)

#接收訊號,連線到自定義槽函式

#self.btn_clicked_signal.connect(self.close)  

self.btn_clicked_signal.connect(self.btn_close)

defbtn_clicked(self):

#自定義訊號傳送,無引數

self.btn_clicked_signal.emit()

defbtn_close(self):

#自定義槽函式

self.close()

if__name__ == '

__main__':

win =winform()

win.show()

自定義的訊號:btn_clicked_signal,需要呼叫btn_clicked()傳送訊號

自定義的槽:btn_close,內部實際上呼叫了內建槽函式close()

說實話,這個案例很容易讓人混淆 內建和自定義,無論是訊號還是槽。

pyqt5 訊號與槽

描述self.obj.destroyed.connect destroy cao 觸發後會執行槽函式,並給槽函式返回釋放物件 self.obj.blocksignals true 臨時打斷訊號 self.obj.objectnamechanged.disconnect 斷開訊號與槽的連線 self....

pyqt5 訊號與槽

訊號與槽 是pyqt的精髓,要多總結學習一下 定義通俗解釋 事件源 狀態發生改變的物件,它產生事件 source obj 按鈕 物件 事件目標 是想要被通知的物件 target obj 被點選 狀態發生改變 事件物件 封裝了事件源中的狀態變化 evnet obj 執行 呼叫函式 def use se...

pyqt5入門 002 訊號 槽

繪製乙個帶有toolbutton的視窗,按照教程001的步驟執行的話,會得到乙個如圖的視窗。但是視窗裡的按鈕無論我們怎麼點,都沒有任何的反應,這就不好玩了。如何打破江局呢,那就要利用 編輯訊號 槽 了 由於太簡單且實現的功能有限,在此不做過多的講解 若要實現更多的功能首先新建立乙個py檔案 from...