python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧装饰器信号与槽详细使用方法与实例


Posted in Python onMarch 06, 2020

装饰器信号与槽

所谓装饰器信号与槽,就是通过装饰器的方法来定义信号与槽函数,具体的使用方法如下

@PyQt5.QtCore.pyqtSlot(参数)
def on_发送者对象名称_发射信号名称(self,参数):
 pass

这种方法有效的前提是下面的函数已经执行:

QMetaObject.connectSlotsByName(QObject)

在上面的代码中,‘发送者对象名称'就是使用setObjectName函数设置的名称,因此自定义槽函数的命名规则也可以看做:on+使用setObjectName设置的名称+信号名称

接下来是具体的实例

import sys
from PyQt5.QtWidgets import QApplication,QWidget,QHBoxLayout,QPushButton
from PyQt5 import QtCore
class CustWidget(QWidget):
 def __init__(self,parent=None):
  super(CustWidget, self).__init__(parent)
  #创建按钮,添加到自身窗口中
  self.okButton=QPushButton('ok',self)
  #使用setObjectName设置对象名称
  self.okButton.setObjectName('okButton')
  #设置自身的布局为水平布局,并添加按钮控件到其中
  layout=QHBoxLayout(self)
  layout.addWidget(self.okButton)
  #TODo 第一种方法
  #self.okButton.clicked.connect(self.okButton_clicked)
 #def okButton_clicked( self ):
 # print('单击了ok按钮')
  #第二种方法
  QtCore.QMetaObject.connectSlotsByName(self)
 @QtCore.pyqtSlot()
 def on_okButton_clicked( self ):
  print('单击了ok按钮')
if __name__ == '__main__':
 app=QApplication(sys.argv)
 win=CustWidget()
 win.show()
 sys.exit(app.exec_())

运行程序,显示效果如图,单击ok按钮,控制台打印预期调试信息

python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧装饰器信号与槽详细使用方法与实例

QtCore.QMetaObject.connectSlotsByName(self)

事实上,它是PyQt5中根据信号名称自动连接到槽函数的核心代码,这行代码用来将QObject中的子孙对象的某些对象按照其objectName连接到相应的槽函数,举个例子说名一下

假设代码QtCore.QMetaObject.connectSlotsByName(self)已经执行,则下面的代码

  @QtCore.pyqtSlot()

    def on_okButton_clicked( self ):

        print('单击了ok按钮')

会被自动识别为下面的代码

def __init__(self,parent=None):

    self.okButton.clicked.connect(self.okButton_clicked)

def okButton_clicked(self):

        print('单击了ok按钮')

信号与槽的断开与连接

有时候基于某些原因,想要临时或永久的断开某个信号与槽函数的连接,这就是要说的内容

一般把connect前面加上dis就是解除绑定的意思:即disconnect

实例如下

from PyQt5.QtCore import QObject,pyqtSignal
class SignalClass(QObject):
 #声明无参数的信号
 signal1=pyqtSignal()
 #声明带一个int类型参数的信号
 signal2=pyqtSignal(int)
 def __init__(self,parent=None):
  super(SignalClass, self).__init__(parent)
  #将signal1信号连接到两个槽函数
  self.signal1.connect(self.sig1Call)
  self.signal1.connect(self.sig2Call)
  #将signal2信号连接到信号1
  self.signal2.connect(self.signal1)
  #发射信号
  self.signal1.emit()
  self.signal2.emit(1)
  #断开信号与槽函数的关系
  self.signal1.disconnect(self.sig1Call)
  self.signal1.disconnect(self.sig2Call)
  self.signal2.disconnect(self.signal1)
  #绑定信号与槽函数
  self.signal1.connect(self.sig1Call)
  self.signal2.connect(self.sig1Call)
  #信号发射
  self.signal1.emit()
  self.signal2.emit(1)
 #输出信号1发射
 def sig1Call( self ):
  print('signal-1 emit')
 #输出信号2发射
 def sig2Call( self ):
  print('signal-2 emit')
if __name__ == '__main__':
 signal=SignalClass()

python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧装饰器信号与槽详细使用方法与实例

本文主要讲解了PyQt5信号与槽的高级使用技巧装饰器信号与槽详细使用方法与实例,更多关于PyQt5信号与槽的知识请查看下面的相关链接

Python 相关文章推荐
go和python调用其它程序并得到程序输出
Feb 10 Python
Python实现的生成自我描述脚本分享(很有意思的程序)
Jul 18 Python
python简单文本处理的方法
Jul 10 Python
python虚拟环境的安装配置图文教程
Oct 20 Python
python实现对指定输入的字符串逆序输出的6种方法
Apr 26 Python
Python3基于sax解析xml操作示例
May 22 Python
TensorFlow实现简单的CNN的方法
Jul 18 Python
python数据归一化及三种方法详解
Aug 06 Python
python-opencv获取二值图像轮廓及中心点坐标的代码
Aug 27 Python
详解Pycharm第三方库的安装及使用方法
Dec 29 Python
linux系统下pip升级报错的解决方法
Jan 31 Python
python爬虫--selenium模块
Mar 31 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧(自定义信号与槽)详解与实例
Mar 06 #Python
python实现QQ邮箱发送邮件
Mar 06 #Python
python GUI库图形界面开发之PyQt5信号与槽基础使用方法与实例
Mar 06 #Python
关于Python字符串显示u...的解决方式
Mar 06 #Python
python GUI库图形界面开发之PyQt5动态(可拖动控件大小)布局控件QSplitter详细使用方法与实例
Mar 06 #Python
浅谈python的elementtree模块处理中文注意事项
Mar 06 #Python
python GUI库图形界面开发之PyQt5表单布局控件QFormLayout详细使用方法与实例
Mar 06 #Python
You might like
PHP优于Node.js的五大理由分享
2012/09/15 PHP
PHP生成条形图的方法
2014/12/10 PHP
PHP基于方差和标准差计算学生成绩的稳定性示例
2017/07/04 PHP
详解php语言最牛掰的Laravel框架
2017/11/20 PHP
js自执行函数的几种不同写法的比较
2012/08/16 Javascript
使用js修改客户端注册表的方法
2013/08/09 Javascript
用javascript删除当前行,添加行(示例代码)
2013/11/25 Javascript
jquery easyui combox一些实用的小方法
2013/12/25 Javascript
JavaScript制作淘宝星级评分效果的思路
2020/06/23 Javascript
js去字符串前后空格的实现方法
2016/02/26 Javascript
vue 父组件调用子组件方法及事件
2018/03/29 Javascript
Vue.Draggable拖拽功能的配置使用方法
2020/07/29 Javascript
NodeJs 模仿SIP话机注册的方法
2019/06/21 NodeJs
JS定时器如何实现提交成功提示功能
2020/06/12 Javascript
原生JS实现京东查看商品点击放大
2020/12/21 Javascript
[03:42]2014DOTA2国际邀请赛 第三日比赛排位扑朔迷离
2014/07/12 DOTA
以windows service方式运行Python程序的方法
2015/06/03 Python
Python的Django框架可适配的各种数据库介绍
2015/07/15 Python
Python实现的文本简单可逆加密算法示例
2017/05/18 Python
Random 在 Python 中的使用方法
2018/08/09 Python
DataFrame.groupby()所见的各种用法详解
2020/06/14 Python
HTML5本地存储之Web Storage详解
2016/07/04 HTML / CSS
浅谈HTML5 Web Worker的使用
2018/01/05 HTML / CSS
Clarins娇韵诗美国官网:法国天然护肤品牌
2016/09/26 全球购物
Surfdome西班牙:世界上最受欢迎的生活方式品牌
2019/02/13 全球购物
HashMap和Hashtable的区别
2013/05/18 面试题
现金会计岗位职责
2013/12/05 职场文书
聚美优品广告词改编
2014/03/14 职场文书
授权委托书怎么写
2014/04/03 职场文书
工会趣味活动方案
2014/08/18 职场文书
大学生联谊活动策划书(光棍节)
2014/10/10 职场文书
紫日观后感
2015/06/05 职场文书
人与自然的观后感
2015/06/18 职场文书
婚礼答谢词范文
2015/09/29 职场文书
2016年6月份红领巾广播稿
2015/12/21 职场文书
2016会计专业自荐信范文
2016/01/28 职场文书