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 相关文章推荐
Python多线程、异步+多进程爬虫实现代码
Feb 17 Python
python3解析库BeautifulSoup4的安装配置与基本用法
Jun 26 Python
win8下python3.4安装和环境配置图文教程
Jul 31 Python
Python基于scipy实现信号滤波功能
May 08 Python
如何利用Anaconda配置简单的Python环境
Jun 24 Python
django迁移数据库错误问题解决
Jul 29 Python
tensorflow 固定部分参数训练,只训练部分参数的实例
Jan 20 Python
有关Tensorflow梯度下降常用的优化方法分享
Feb 04 Python
Pytorch maxpool的ceil_mode用法
Feb 18 Python
python DES加密与解密及hex输出和bs64格式输出的实现代码
Apr 13 Python
Python requests模块cookie实例解析
Apr 14 Python
Django-Scrapy生成后端json接口的方法示例
Oct 06 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 smarty模板引擎的6个小技巧
2014/04/24 PHP
php使用curl伪造来源ip和refer的方法示例
2018/05/08 PHP
JSON 教程 json入门学习笔记
2020/09/22 Javascript
html中的input标签的checked属性jquery判断代码
2012/09/19 Javascript
jquery写个checkbox——类似邮箱全选功能
2013/03/19 Javascript
jquery slibings选取同级其他元素的实现代码
2013/11/15 Javascript
JavaScript继承基础讲解(原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承)
2014/08/16 Javascript
Js控制滑轮左右滑动实例
2015/02/13 Javascript
多个jQuery版本共存的处理方案
2015/03/17 Javascript
13个PHP函数超实用
2015/10/21 Javascript
js实现兼容IE、Firefox的图片缩放代码
2015/12/08 Javascript
jQuery mobile 移动web(4)
2015/12/20 Javascript
深入理解jQuery layui分页控件的使用
2016/08/17 Javascript
js实现前端分页页码管理
2017/01/06 Javascript
vue-router配合ElementUI实现导航的实例
2018/02/11 Javascript
JavaScript捕捉事件和阻止冒泡事件实例分析
2018/08/03 Javascript
angular6开发steps步骤条组件
2019/07/04 Javascript
vue3.0中使用postcss-pxtorem的具体方法
2019/11/20 Javascript
Python写的一个定时重跑获取数据库数据
2016/12/28 Python
Python tkinter实现的图片移动碰撞动画效果【附源码下载】
2018/01/04 Python
Python实现简易版的Web服务器(推荐)
2018/01/29 Python
python 自动批量打开网页的示例
2019/02/21 Python
python自定义线程池控制线程数量的示例
2019/02/22 Python
python垃圾回收机制(GC)原理解析
2019/12/30 Python
python中watchdog文件监控与检测上传功能
2020/10/30 Python
Python 调用 ES、Solr、Phoenix的示例代码
2020/11/23 Python
美国家具网站:Cymax
2016/09/17 全球购物
请写出一段Python代码实现删除一个list里面的重复元素
2015/12/29 面试题
大专毕业自我鉴定
2014/02/04 职场文书
班级标语大全
2014/06/21 职场文书
大学生创业计划书
2014/08/14 职场文书
车辆委托书范本
2014/10/05 职场文书
个人查摆剖析材料
2014/10/16 职场文书
幼儿园欢迎词范文
2015/01/26 职场文书
新党员入党决心书
2015/09/22 职场文书
初任公务员培训心得体会
2016/01/08 职场文书