午夜剧场伦理_日本一道高清_国产又黄又硬_91黄色网战_女同久久另类69精品国产_妹妹的朋友在线

您的位置:首頁技術(shù)文章
文章詳情頁

python GUI庫圖形界面開發(fā)之PyQt5信號與槽基礎(chǔ)使用方法與實例

瀏覽:6日期:2022-08-03 14:05:43
信號與槽有三種使用方法

第一種:內(nèi)置信號與槽的使用

第二種:自定義信號與槽的使用

第三種:裝飾器的信號與槽的使用

一: 內(nèi)置信號與槽的使用

內(nèi)置信號與槽的使用,是指在發(fā)射信號時,使用窗口控件的函數(shù),而不是自定義的函數(shù),這種也是我們前面用的最多的,下面簡單的一個實例,大家就會明白

import sysfrom PyQt5.QtWidgets import QMessageBox,QPushButton,QApplication,QWidgetapp=QApplication(sys.argv)widget=QWidget()def showMsg(): QMessageBox.information(widget,’信息提示框’,’Ok 彈出測試信息’)btn=QPushButton(’測試點擊按鈕’,widget)btn.clicked.connect(showMsg)widget.show()sys.exit(app.exec_())

運行腳本,顯示效果如下

python GUI庫圖形界面開發(fā)之PyQt5信號與槽基礎(chǔ)使用方法與實例python GUI庫圖形界面開發(fā)之PyQt5信號與槽基礎(chǔ)使用方法與實例

這個例子將一個按鈕對象的內(nèi)置clicked信號與自定義槽函數(shù)showMsg()連接,單擊按鈕,就會觸發(fā)這個槽函數(shù),彈出一個信息提示框

二:自定義信號與槽的使用

自定義信號與槽的使用,是指在發(fā)射信號時,不使用窗口控件的函數(shù),而是使用自定義的函數(shù),(簡單的說就是使用oyqtsSignal類實例發(fā)射信號),之所以要使用自定義的信號與槽,是因為通過內(nèi)置函數(shù)發(fā)射信號有自身的缺陷,首先,內(nèi)置函數(shù)只包含一些常用地信號,有些信號發(fā)射找不到對應(yīng)的內(nèi)置函數(shù),其次在特定的情況下,才能發(fā)射此信號,如按鈕的點擊事件,最后,內(nèi)置函數(shù)傳遞的參數(shù)是特定的,不可以自定義,使用自定義的信號與槽函數(shù)則沒有這些缺陷

在pyqt5中,自定義信號與槽的適用很靈活,比如因為業(yè)務(wù)需要,在程序中的某些地方需要發(fā)射一個信號,傳遞多種數(shù)據(jù),然后在槽函數(shù)接受這些數(shù)據(jù),這樣就可以很靈活的實現(xiàn)一些業(yè)務(wù)邏輯

簡單的一個實例:簡單的自定義信號與槽

from PyQt5.QtCore import QObject,pyqtSignal#信號對象class QTypeSignal(QObject): #定義一個信號 # sendmsg = pyqtSignal(object) #todo 優(yōu)化 多個參數(shù)傳遞 sendmsg=pyqtSignal(str,str) def __init__(self): super(QTypeSignal, self).__init__() def run( self ): #發(fā)射信號 #self.sendmsg.emit(’hell’) #todo 優(yōu)化 發(fā)射多個參數(shù) self.sendmsg.emit(’第一參數(shù)’,’第二個參數(shù)’)#槽對象class QTypeSlot(QObject): def __init__(self): super(QTypeSlot, self).__init__() #槽對象中的槽函數(shù) # def get( self,msg ): # print('QSlot get msg => ' + msg) #todo 優(yōu)化 多個參數(shù) def get( self,msg1,msg2 ): print('QSlot get msg => ' + msg1+’ ’+msg2)if __name__ == ’__main__’: #實例化信號對象 send=QTypeSignal() #實例化槽對象 slot=QTypeSlot() #1 print(’_____-把信號綁定到槽函數(shù)上_____’) send.sendmsg.connect(slot.get) send.run() print(’_____-把信號與槽函數(shù)解綁_____’) send.sendmsg.disconnect(slot.get) send.run()

python GUI庫圖形界面開發(fā)之PyQt5信號與槽基礎(chǔ)使用方法與實例

信號與槽連接的主要步驟如下

第一步:生成一個信號

#定義一個信號

# sendmsg = pyqtSignal(object)

#todo 優(yōu)化 多個參數(shù)傳遞

sendmsg=pyqtSignal(str,str)

第二步:將信號與槽函數(shù)連接起來

print(’_____-把信號綁定到槽函數(shù)上_____’)

send.sendmsg.connect(slot.get)

第三步:槽函數(shù)接受數(shù)據(jù)

def get( self,msg1,msg2 ):

print('QSlot get msg => ' + msg1+’ ’+msg2)

第四步:發(fā)射信號的實現(xiàn)

self.sendmsg.emit(’第一參數(shù)’,’第二個參數(shù)’)

第五步:將信號綁定到槽對象中的槽函數(shù)上,所以槽函數(shù)能收到所發(fā)射的信號,自此,數(shù)據(jù)傳遞成功,就是這么簡單,如果需要傳遞多個數(shù)據(jù),可以自定義參數(shù)類型與數(shù)目

send=QTypeSignal()

slot=QTypeSlot()

#

print(’_____-把信號綁定到槽函數(shù)上_____’)

send.sendmsg.connect(slot.get)

三:使用裝飾器信號與槽

1、使用格式

@PyQt5.QtCore.pyqtSlot(參數(shù))def on_發(fā)送者對象名稱_發(fā)射信號名稱(self,參數(shù)): 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(’使用裝飾器點擊了按鈕’)

本文主要講解了PyQt5信號與槽基礎(chǔ)使用方法與實例,更多關(guān)于PyQt5信號與槽的知識請查看下面的相關(guān)鏈接

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 精品国产福利 | 色天天综合 | 天堂在线观看中文字幕 | 日日夜夜操视频 | 国产成人麻豆精品午夜在线 | 日本中文字幕精品 | 国产欧美精品区一区二区三区 | 爱情与灵药在线 | 99精品国产一区二区 | 免费福利视频在线观看 | 成人网在线 | 在线观看视频你懂的 | 69国产精品 | 欧美成人一级片 | 香蕉久久久久 | 成人一区二区视频 | 午夜一级黄色片 | 日韩精品久久久 | 亚洲高清久久 | 欧美一级欧美三级 | 国产第一网站 | 国产精品91视频 | 久草国产视频 | 中文字幕视频一区 | 91av一区二区三区 | 国产激情免费 | 好吊色欧美一区二区三区视频 | 天天干在线观看 | 欧美xxxx狂喷水欧美喷水 | 豆国产97在线 | 亚洲 | 成人午夜视频网站 | 久久国产区| av网址在线免费观看 | 中文字幕在线观看精品 | 亚洲第一页中文字幕 | 欧美高清一区 | 超碰久草 | 婷婷色网站 | 韩国中文字幕hd久久精品 | 亚洲免费一级片 | 免费看成人毛片 |