這篇文章主要介紹了python中GUI庫圖形界面開發之PyQt5信號與槽的使用示例,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
成都創新互聯公司專業為企業提供豐城網站建設、豐城做網站、豐城網站設計、豐城網站制作等企業網站建設、網頁設計與制作、豐城企業網站模板建站服務,十多年豐城做網站經驗,不只是建網站,更提供有價值的思路和整體網絡服務。信號與槽有三種使用方法第一種:內置信號與槽的使用
第二種:自定義信號與槽的使用
第三種:裝飾器的信號與槽的使用
一: 內置信號與槽的使用內置信號與槽的使用,是指在發射信號時,使用窗口控件的函數,而不是自定義的函數,這種也是我們前面用的最多的,下面簡單的一個實例,大家就會明白
import sys from PyQt5.QtWidgets import QMessageBox,QPushButton,QApplication,QWidget app=QApplication(sys.argv) widget=QWidget() def showMsg(): QMessageBox.information(widget,'信息提示框','Ok 彈出測試信息') btn=QPushButton('測試點擊按鈕',widget) btn.clicked.connect(showMsg) widget.show() sys.exit(app.exec_())
運行腳本,顯示效果如下
這個例子將一個按鈕對象的內置clicked信號與自定義槽函數showMsg()連接,單擊按鈕,就會觸發這個槽函數,彈出一個信息提示框
二:自定義信號與槽的使用自定義信號與槽的使用,是指在發射信號時,不使用窗口控件的函數,而是使用自定義的函數,(簡單的說就是使用oyqtsSignal類實例發射信號),之所以要使用自定義的信號與槽,是因為通過內置函數發射信號有自身的缺陷,首先,內置函數只包含一些常用地信號,有些信號發射找不到對應的內置函數,其次在特定的情況下,才能發射此信號,如按鈕的點擊事件,最后,內置函數傳遞的參數是特定的,不可以自定義,使用自定義的信號與槽函數則沒有這些缺陷
在pyqt5中,自定義信號與槽的適用很靈活,比如因為業務需要,在程序中的某些地方需要發射一個信號,傳遞多種數據,然后在槽函數接受這些數據,這樣就可以很靈活的實現一些業務邏輯
簡單的一個實例:簡單的自定義信號與槽
from PyQt5.QtCore import QObject,pyqtSignal #信號對象 class QTypeSignal(QObject): #定義一個信號 # sendmsg = pyqtSignal(object) #todo 優化 多個參數傳遞 sendmsg=pyqtSignal(str,str) def __init__(self): super(QTypeSignal, self).__init__() def run( self ): #發射信號 #self.sendmsg.emit('hell') #todo 優化 發射多個參數 self.sendmsg.emit('第一參數','第二個參數') #槽對象 class QTypeSlot(QObject): def __init__(self): super(QTypeSlot, self).__init__() #槽對象中的槽函數 # def get( self,msg ): # print("QSlot get msg => " + msg) #todo 優化 多個參數 def get( self,msg1,msg2 ): print("QSlot get msg => " + msg1+' '+msg2) if __name__ == '__main__': #實例化信號對象 send=QTypeSignal() #實例化槽對象 slot=QTypeSlot() #1 print('_____-把信號綁定到槽函數上_____') send.sendmsg.connect(slot.get) send.run() print('_____-把信號與槽函數解綁_____') send.sendmsg.disconnect(slot.get) send.run()
信號與槽連接的主要步驟如下
第一步:生成一個信號
#定義一個信號
# sendmsg = pyqtSignal(object)
#todo 優化 多個參數傳遞
sendmsg=pyqtSignal(str,str)
第二步:將信號與槽函數連接起來
print('_____-把信號綁定到槽函數上_____')
send.sendmsg.connect(slot.get)
第三步:槽函數接受數據
def get( self,msg1,msg2 ):
print("QSlot get msg => " + msg1+' '+msg2)
第四步:發射信號的實現
self.sendmsg.emit('第一參數','第二個參數')
第五步:將信號綁定到槽對象中的槽函數上,所以槽函數能收到所發射的信號,自此,數據傳遞成功,就是這么簡單,如果需要傳遞多個數據,可以自定義參數類型與數目
三:使用裝飾器信號與槽send=QTypeSignal()
slot=QTypeSlot()
#
print('_____-把信號綁定到槽函數上_____')
send.sendmsg.connect(slot.get)
1、使用格式
@PyQt5.QtCore.pyqtSlot(參數) def on_發送者對象名稱_發射信號名稱(self,參數): pass
2、注意點,使用裝飾器必須定義兩個東西
QMetaObject.connectSlotsByName(self)
給需要綁定事件的定義一個id(self.btn.setObjectName('名稱'))
3、按鈕的普通事件
... class Window(QWidget): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.setWindowTitle('裝飾器信號與槽') self.resize(500, 500) self.move(400, 200) self.btn = QPushButton('按鈕', self) self.init_ui() def init_ui(self): self.btn.clicked.connect(self.btn_hand) @staticmethod def btn_hand(): print('使用connect點擊了按鈕') ...
4、使用裝飾器后的事件
... class Window(QWidget): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.setWindowTitle('裝飾器信號與槽') self.resize(500, 500) self.move(400, 200) self.btn = QPushButton('按鈕', self) self.init_ui() # 要在加載組件后使用 QMetaObject.connectSlotsByName(self) def init_ui(self): # 這個地方定義的名字直接在下面使用 self.btn.setObjectName('btn') @pyqtSlot() def on_btn_clicked(self): print('使用裝飾器點擊了按鈕')
感謝你能夠認真閱讀完這篇文章,希望小編分享的“python中GUI庫圖形界面開發之PyQt5信號與槽的使用示例”這篇文章對大家有幫助,同時也希望大家多多支持創新互聯,關注創新互聯行業資訊頻道,更多相關知識等著你來學習!
網站名稱:python中GUI庫圖形界面開發之PyQt5信號與槽的使用示例-創新互聯
當前URL:http://vcdvsql.cn/article34/deocse.html
成都網站建設公司_創新互聯,為您提供做網站、微信公眾號、動態網站、面包屑導航、標簽優化、全網營銷推廣
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯