最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python GUI庫(kù)圖形界面開(kāi)發(fā)之PyQt5信號(hào)與槽基礎(chǔ)使用方法與實(shí)例

 更新時(shí)間:2020年03月06日 14:21:01   作者:jia666666  
這篇文章主要介紹了python GUI庫(kù)圖形界面開(kāi)發(fā)之PyQt5信號(hào)與槽基礎(chǔ)使用方法與實(shí)例,需要的朋友可以參考下

信號(hào)與槽有三種使用方法

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

第二種:自定義信號(hào)與槽的使用

第三種:裝飾器的信號(hào)與槽的使用

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

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

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

運(yùn)行腳本,顯示效果如下

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

二:自定義信號(hào)與槽的使用

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

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

簡(jiǎn)單的一個(gè)實(shí)例:簡(jiǎn)單的自定義信號(hào)與槽

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

信號(hào)與槽連接的主要步驟如下

第一步:生成一個(gè)信號(hào)

    #定義一個(gè)信號(hào)

    # sendmsg = pyqtSignal(object)

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

    sendmsg=pyqtSignal(str,str)

第二步:將信號(hào)與槽函數(shù)連接起來(lái)

print('_____-把信號(hào)綁定到槽函數(shù)上_____')

    send.sendmsg.connect(slot.get)

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

 def get( self,msg1,msg2 ):

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

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

 self.sendmsg.emit('第一參數(shù)','第二個(gè)參數(shù)')

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

    send=QTypeSignal()

    slot=QTypeSlot()

    #

    print('_____-把信號(hào)綁定到槽函數(shù)上_____')

    send.sendmsg.connect(slot.get)

三:使用裝飾器信號(hào)與槽

1、使用格式

@PyQt5.QtCore.pyqtSlot(參數(shù))
def on_發(fā)送者對(duì)象名稱(chēng)_發(fā)射信號(hào)名稱(chēng)(self,參數(shù)):
 pass

2、注意點(diǎn),使用裝飾器必須定義兩個(gè)東西

QMetaObject.connectSlotsByName(self)

給需要綁定事件的定義一個(gè)id(self.btn.setObjectName('名稱(chēng)'))

3、按鈕的普通事件

...
class Window(QWidget):
 def __init__(self, *args, **kwargs):
 super().__init__(*args, **kwargs)
 self.setWindowTitle('裝飾器信號(hào)與槽')
 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點(diǎn)擊了按鈕')
...

4、使用裝飾器后的事件

...
class Window(QWidget):
 def __init__(self, *args, **kwargs):
 super().__init__(*args, **kwargs)
 self.setWindowTitle('裝飾器信號(hào)與槽')
 self.resize(500, 500)
 self.move(400, 200)
 self.btn = QPushButton('按鈕', self)
 self.init_ui()
 # 要在加載組件后使用
 QMetaObject.connectSlotsByName(self)
 
 def init_ui(self):
 # 這個(gè)地方定義的名字直接在下面使用
 self.btn.setObjectName('btn')
 
 @pyqtSlot()
 def on_btn_clicked(self):
 print('使用裝飾器點(diǎn)擊了按鈕')

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

相關(guān)文章

  • Python Django 數(shù)據(jù)庫(kù)的相關(guān)操作詳解

    Python Django 數(shù)據(jù)庫(kù)的相關(guān)操作詳解

    下面小編就為大家?guī)?lái)一篇django數(shù)據(jù)庫(kù)的相關(guān)操作,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2021-11-11
  • pandas 數(shù)據(jù)類(lèi)型轉(zhuǎn)換的實(shí)現(xiàn)

    pandas 數(shù)據(jù)類(lèi)型轉(zhuǎn)換的實(shí)現(xiàn)

    這篇文章主要介紹了pandas 數(shù)據(jù)類(lèi)型轉(zhuǎn)換的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • pandas如何優(yōu)雅的列轉(zhuǎn)行及行轉(zhuǎn)列詳解

    pandas如何優(yōu)雅的列轉(zhuǎn)行及行轉(zhuǎn)列詳解

    我們?cè)谧鰯?shù)據(jù)處理的時(shí)候遇到pandas列轉(zhuǎn)行的問(wèn)題,這篇文章主要給大家介紹了關(guān)于pandas如何優(yōu)雅的列轉(zhuǎn)行及行轉(zhuǎn)列的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-12-12
  • python中的計(jì)時(shí)器timeit的使用方法

    python中的計(jì)時(shí)器timeit的使用方法

    本篇文章主要介紹了python中的計(jì)時(shí)器timeit的使用方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10
  • python美多商城項(xiàng)目開(kāi)發(fā)小結(jié)

    python美多商城項(xiàng)目開(kāi)發(fā)小結(jié)

    這篇文章主要介紹了python美多商城項(xiàng)目開(kāi)發(fā)小結(jié),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02
  • Python、Javascript中的閉包比較

    Python、Javascript中的閉包比較

    這篇文章主要介紹了Python、Javascript中的閉包比較,本文分別講解了Python和Javascript中的閉包,分對(duì)它們的不同做了一個(gè)簡(jiǎn)單的比較,需要的朋友可以參考下
    2015-02-02
  • PyTorch CUDA環(huán)境配置及安裝的步驟(圖文教程)

    PyTorch CUDA環(huán)境配置及安裝的步驟(圖文教程)

    這篇文章主要介紹了PyTorch CUDA環(huán)境配置及安裝的步驟(圖文教程),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Python 連接 MySQL 的幾種方法

    Python 連接 MySQL 的幾種方法

    這篇文章主要介紹了Python 連接 MySQL 的幾種方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-09-09
  • 提升Python Scrapy庫(kù)數(shù)據(jù)采集速度實(shí)現(xiàn)高效爬蟲(chóng)

    提升Python Scrapy庫(kù)數(shù)據(jù)采集速度實(shí)現(xiàn)高效爬蟲(chóng)

    Scrapy是一個(gè)強(qiáng)大而靈活的Python爬蟲(chóng)框架,被廣泛用于數(shù)據(jù)采集、網(wǎng)站抓取和網(wǎng)絡(luò)爬蟲(chóng)開(kāi)發(fā),本文將深入介紹Scrapy的功能和用法,并提供豐富的示例代碼,幫助更好地理解和應(yīng)用
    2023-11-11
  • python pip配置國(guó)內(nèi)鏡像源的方法(永久和臨時(shí))

    python pip配置國(guó)內(nèi)鏡像源的方法(永久和臨時(shí))

    在使用 pip 安裝 Python 模塊時(shí),默認(rèn)的國(guó)外鏡像源可能會(huì)導(dǎo)致下載速度緩慢甚至超時(shí),為了解決這個(gè)問(wèn)題,可以使用國(guó)內(nèi)的鏡像源來(lái)加速下載,以下是常用的國(guó)內(nèi)鏡像源以及臨時(shí)和永久的配置方法,需要的朋友可以參考下
    2025-04-04

最新評(píng)論

行唐县| 玉山县| 昔阳县| 赤壁市| 呼和浩特市| 景宁| 南澳县| 阿尔山市| 会同县| 新源县| 朝阳区| 治多县| 玉屏| 北京市| 东乡族自治县| 汾阳市| 固阳县| 马龙县| 云梦县| 盘山县| 易门县| 垦利县| 宁夏| 兴化市| 镇宁| 南召县| 徐州市| 锡林郭勒盟| 广饶县| 刚察县| 天峻县| 双城市| 会理县| 湖口县| 黔南| 垦利县| 察雅县| 盖州市| 岢岚县| 南江县| 张家港市|