GUI学习之n——自定义信号
PyQt中是依靠信号——槽的机制来运行,可是有些时候需要我们定义一下些新的信号以满足使用要求,例如按钮是没有右击的效果,那我们怎么创建一个新的信号呢?
首先要注意,新的信号是要以类属性的形式来定义
class BTN(QPushButton):
rightClicked = pyqtSignal() #类属性,建立新信号
def __init__(self,*args,**kargs):
super().__init__(*args,**kargs)
如果想要在信号中传递参数,就在定义信号的时候定义好参数的数据类型,比如我们想在点击右键的时候发送字符串‘右键被单击’
class BTN(QPushButton):
rightClicked = pyqtSignal(str) #类属性,建立新信号
def __init__(self,*args,**kwargs):
super().__init__(*args,**kwargs) def mousePressEvent(self, evt):
super().mousePressEvent(evt) #非常重要,要先继承否则就成重构方法了
if evt.button() == 2: #鼠标右键对应button映射值为2
self.rightClicked.emit('右键被单击') #发射信号并传递参数
一定要注意在重构事件的时候先继承,否则就成完全重构了。如果把继承这一行注释掉以后,鼠标左键单击就没有事件了。
注意这里用了个很重要的方法
sign.emit() #发送信号
有些信号使用时会被重载,传递的参数可以是不同类型的,使用时候需要选择信号数据类型,这时候要这样定义
class BTN(QPushButton):
rightClicked = pyqtSignal([str],[int]) #类属性,建立新信号,指定参数类型
def __init__(self,*args,**kwargs):
super().__init__(*args,**kwargs) def mousePressEvent(self, evt):
super().mousePressEvent(evt) #非常重要,要先继承否则就成重构方法了
if evt.button() == 2: #鼠标右键对应button映射值为2
self.rightClicked[int].emit(123) #发射信号并传递参数
self.rightClicked[str].emit('右键被单击')
调用的时候就可以指名数据类型了
btn.rightClicked[str].connect(lambda val:print(val))#实例化后调用
还有一种情况是同时传递多个参数(带多个参数的时候也可以包含上面那种情况)
class BTN(QPushButton):
rightClicked = pyqtSignal([str],[int,list]) #类属性,建立新信号,指定参数类型
def __init__(self,*args,**kwargs):
super().__init__(*args,**kwargs) def mousePressEvent(self, evt):
super().mousePressEvent(evt) #非常重要,要先继承否则就成重构方法了
if evt.button() == 2: #鼠标右键对应button映射值为2
self.rightClicked[int,list].emit(123,[1,2,3,4,5]) #发射信号时传递多个参数
self.rightClicked[str].emit('右键被单击')
GUI学习之n——自定义信号的更多相关文章
- PyQt学习随笔:自定义信号连接时报AttributeError: 'PyQt5.QtCore.pyqtSignal' object has no attribute 'connect'
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 如果使用自定义信号,一定要记得信号是类变量,必须在类中定义,不能在实例 ...
- PyQt(Python+Qt)学习随笔:自定义信号在emit发射信号时报错:AttributeError: object has no attribute
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 如果使用自定义信号,一定要记得信号是类变量,必须在类中定义,不能在实例 ...
- Qt 学习之路 2(5):自定义信号槽
Home / Qt 学习之路 2 / Qt 学习之路 2(5):自定义信号槽 Qt 学习之路 2(5):自定义信号槽 豆子 2012年8月24日 Qt 学习之路 2 131条评论 上一节我们详 ...
- 第15.19节 PyQt(Python+Qt)入门学习:自定义信号与槽连接
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.引言 本文利用中介绍了PyQt中的信号和槽机制,除了使用PyQt组件的已有信号外,PyQt和Qt ...
- Qt学习笔记-了解信号与槽-自定义信号-自定义槽
信号与槽是连接不同控件直接的渠道. 这里以Horizontal Slider和Dial两个控件举例. 目的是在改变滑条的数值时,Dial也随之响应. 首先添加两个控件. 然后按快捷键F4进入控件编辑模 ...
- Django学习之缓存和信号
Django学习之缓存和信号 一 缓存 由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个views ...
- Qt之自定义信号和槽函数
自定义信号和槽函数: 1.类的声明和实现分别放在.h和.cpp文件中: 2.类声明包含Q_OBJECT宏: 3.信号只要声明不要设计其的实现函数 4.发射信号用emit关键字 5.自定义槽的实现与普通 ...
- [转载]SharePoint 2013搜索学习笔记之自定义结果源
搜索中心新建好之后在搜索结果页上会默认有所有内容,人员,对话,视频这四个结果分类,每个分类会返回指定范围的搜索结果,这里我再添加了部门日志结果分类,搜索这个分类只会返回部门日志内容类型的搜索结果,要实 ...
- shell学习总结之自定义函数
shell学习总结之自定义函数 Myfun (){ echo -n "now i is $i " ! [ "$i" ] && exit ; ec ...
随机推荐
- pycharm2019连接mysql错误08801 ------Connection to django1@localhost failed. [08001] Could not create connection to database server. Attempted reconnect 3 times. Giving up.
Error:Connection to django1@localhost failed. [08001] Could not create connection to database server ...
- 流程控制 if else elif
[root@LV work]# [root@LV work]# vim name.py[root@LV work]# chmod +x name.py [root@LV work]# ./name.p ...
- js实现两个从input获取到的数字相加引发的问题
从input中获取到的数据是文本类型的,如果不转化类型直接相加会变成字符串的相加. 使用Number()函数可以解决这个问题,如下 var c = Number(a) + Number(b)
- nginx调优buffer参数设置
内容来自 https://blog.tanteng.me/2016/03/nginx-buffer-params/.有空再详细了解 Nginx性能调优之buffer参数设置 打开Nginx的error ...
- FineReport打印方式(转)
1. 报表打印机制 各种打印的运行机制,都是选择打印时,先根据报表内容,在服务器的内存中将页面中的内容全部生成完毕,即生成对应格式的对象:然后再由serverlet直接推送给客户端,最后根据选择的打印 ...
- 记录一下WPF中自寄宿asp.net服务添加urlacl的问题
asp.net公开服务地址时,由于当前用户权限问题,会导致服务地址未添加到urlacl池中报错. 关于添加urlacl的细节,请参考我之前的文章:asp.net self host and urlac ...
- REST API (四)之Generic views
通用的视图 Django’s generic views... were developed as a shortcut for common usage patterns... 它们采取一些常见的习 ...
- 操作Json对象的C#方法
json对象长这样 { "UniqueName": { "Required": "true", , , "Regex": ...
- 安卓手机上传同一张图片第二次不触发onchange
清空上一次file内部的值 <script type="text/javascript"> var file = document.getElementById(&q ...
- 文件类型 | 命令ln | 软链接硬链接
1.9文件类型 1.9.1常见文件类型 d:目录 -:普通文件 l:链接文件 b:设备 1.9.2文件后缀名 sh:shell脚本 tar.gz:压缩包 my.cnf:配置文件 test.zip:压缩 ...