电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

python GUI庫圖形界面開發之PyQt5信號與槽基礎使用方法與實例

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

第一種:內置信號與槽的使用

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

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

一: 內置信號與槽的使用

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

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庫圖形界面開發之PyQt5信號與槽基礎使用方法與實例python GUI庫圖形界面開發之PyQt5信號與槽基礎使用方法與實例

這個例子將一個按鈕對象的內置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()

python GUI庫圖形界面開發之PyQt5信號與槽基礎使用方法與實例

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

第一步:生成一個信號

#定義一個信號

# 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(’使用裝飾器點擊了按鈕’)

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

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 除尘器布袋骨架,除尘器滤袋,除尘器骨架,电磁脉冲阀膜片,卸灰阀,螺旋输送机-泊头市天润环保机械设备有限公司 | 节流截止放空阀-不锈钢阀门-气动|电动截止阀-鸿华阀门有限公司 | 泰来华顿液氮罐,美国MVE液氮罐,自增压液氮罐,定制液氮生物容器,进口杜瓦瓶-上海京灿精密机械有限公司 | 淘气堡_室内儿童乐园_户外无动力儿童游乐设备-高乐迪(北京) | 紫外线老化试验箱_uv紫外线老化试验箱价格|型号|厂家-正航仪器设备 | 列管冷凝器,刮板蒸发器,外盘管反应釜厂家-无锡曼旺化工设备有限公司 | 防爆大气采样器-防爆粉尘采样器-金属粉尘及其化合物采样器-首页|盐城银河科技有限公司 | 运动木地板厂家_体育木地板安装_篮球木地板选购_实木运动地板价格 | 领先的大模型技术与应用公司-中关村科金 | 新材料分散-高速均质搅拌机-超声波分散混合-上海化烁智能设备有限公司 | 水热合成反应釜-防爆高压消解罐-西安常仪仪器设备有限公司 | 台式低速离心机-脱泡离心机-菌种摇床-常州市万丰仪器制造有限公司 | 聚丙烯酰胺_阴离子_阳离子「用量少」巩义亿腾厂家直销,售后无忧 聚合甘油__盐城市飞龙油脂有限公司 | 汽车整车综合环境舱_军标砂尘_盐雾试验室试验箱-无锡苏南试验设备有限公司 | 阿里巴巴诚信通温州、台州、宁波、嘉兴授权渠道商-浙江联欣科技提供阿里会员办理 | 佛山商标注册_商标注册代理|专利注册申请_商标注册公司_鸿邦知识产权 | 纳米二氧化硅,白炭黑,阴离子乳化剂-臻丽拾科技 | 储气罐,真空罐,缓冲罐,隔膜气压罐厂家批发价格,空压机储气罐规格型号-上海申容压力容器集团有限公司 | 电渗析,废酸回收,双极膜-山东天维膜技术有限公司 | 钢化玻璃膜|手机钢化膜|钢化膜厂家|手机保护膜-【东莞市大象电子科技有限公司】 | 槽钢冲孔机,槽钢三面冲,带钢冲孔机-山东兴田阳光智能装备股份有限公司 | 高通量组织研磨仪-多样品组织研磨仪-全自动组织研磨仪-研磨者科技(广州)有限公司 | 扒渣机,铁水扒渣机,钢水扒渣机,铁水捞渣机,钢水捞渣机-烟台盛利达工程技术有限公司 | 上海办公室装修公司_办公室设计_直营办公装修-羚志悦装 | 合肥风管加工厂-安徽螺旋/不锈钢风管-通风管道加工厂家-安徽风之范 | 粉末包装机-给袋式包装机-全自动包装机-颗粒-液体-食品-酱腌菜包装机生产线【润立机械】 | 鹤壁创新仪器公司-全自动量热仪,定硫仪,煤炭测硫仪,灰熔点测定仪,快速自动测氢仪,工业分析仪,煤质化验仪器 | 熔体泵|换网器|熔体齿轮泵|熔体计量泵厂家-郑州巴特熔体泵有限公司 | 武汉不干胶印刷_标签设计印刷_不干胶标签印刷厂 - 武汉不干胶标签印刷厂家 | 拉力机-拉力试验机-万能试验机-电子拉力机-拉伸试验机-剥离强度试验机-苏州皖仪实验仪器有限公司 | LED灯杆屏_LED广告机_户外LED广告机_智慧灯杆_智慧路灯-太龙智显科技(深圳)有限公司 | 迪威娱乐|迪威娱乐客服|18183620002 | ETFE膜结构_PTFE膜结构_空间钢结构_膜结构_张拉膜_浙江萬豪空间结构集团有限公司 | 企典软件一站式企业管理平台,可私有、本地化部署!在线CRM客户关系管理系统|移动办公OA管理系统|HR人事管理系统|人力 | 展厅设计-展馆设计-专业企业展厅展馆设计公司-昆明华文创意 | 艺术涂料|木纹漆施工|稻草漆厂家|马来漆|石桦奴|水泥漆|选加河南天工涂料 | 上海租奔驰_上海租商务车_上海租车网-矢昂汽车服务公司 | 贴片电容-贴片电阻-二三极管-国巨|三星|风华贴片电容代理商-深圳伟哲电子 | 最新范文网_实用的精品范文美文网 | RS系列电阻器,RK_RJ启动调整电阻器,RQ_RZ电阻器-上海永上电器有限公司 | 上海璟文空运首页_一级航空货运代理公司_机场快递当日达 |