关键词:
在第六篇中已经学习过了自定义信号的相关内容了,那一篇中讲的是自定义类中的自定义信号,类和信号都是自己定义的。那么今天想要学习的是事件处理和信号的关系。如同Label标签,它本身有很多的信号,但是它没有当鼠标双击时的事件。那么我们想要实现效果,就要自己写一个label对象,让它添加这个功能。
效果图:
play.py
#!/usr/bin/env python # _*_ coding: UTF-8 _*_ """================================================= @Project -> File : Operate_system_ModeView_structure -> play.py @IDE : PyCharm @Author : zihan @Date : 2020/5/4 11:16 @Desc : =================================================""" import sys from PyQt5.QtWidgets import QApplication, QWidget, QLabel from PyQt5.QtCore import pyqtSignal from ui_play import Ui_Form class QmyLabel(QLabel): double_clicked = pyqtSignal() # 自定义信号 def mouseDoubleClickEvent(self, event): # 双击事件的处理 self.double_clicked.emit() class QmyWidget(QWidget): def __init__(self, parent=None): super().__init__(parent) # 调用父类构造函数 self.ui = Ui_Form() # 创建UI对象 self.ui.setupUi(self) # 构造UI # # ===================事件处理函数 self.origin = True # 是否是原始标签 self.mylabel = QmyLabel(self) self.mylabel.setText("双击测试标签") font = self.mylabel.font() font.setPointSize(18) font.setBold(True) self.mylabel.setFont(font) label_size = self.mylabel.sizeHint() width_widget = self.width() height_widget = self.height() self.mylabel.setGeometry(int((width_widget - label_size.width()) / 2), int((height_widget - label_size.height()) / 2), label_size.width(), label_size.height()) self.mylabel.double_clicked.connect(self.do_mylabel_double_clicked) def do_mylabel_double_clicked(self): if self.origin: self.mylabel.setText("已经被双击了") self.origin = False else: self.mylabel.setText("双击测试标签") self.origin = True if __name__ == ‘__main__‘: app = QApplication(sys.argv) # 创建app form = QmyWidget() form.show() sys.exit(app.exec_())
QmyLabel是继承于QLabel的,只是在QLabel的基础上添加了鼠标双击事件处理的功能。
常用的默认事件处理函数:
默认函数名称 | 触发时机 | 参数event类型 |
mousePressEvent | 鼠标按键按下时触发 | QMouseEvent |
mouseReleaseEvent | 鼠标按键释放时触发 | QMouseEvent |
mouseMoveEvent | 鼠标移动时触发 | QMouseEvent |
mouseDoubleClickEvent | 鼠标双击时触发 | QMouseEvent |
keyPressEvent | 键盘按键按下时触发 | QKeyEvent |
keyReleaseEvent | 键盘按键释放时触发 | QKeyEvent |
paintEvent | 在界面需要重新绘制时触发 | QPaintEvent |
closeEvent | 一个窗体关闭时触发 | QCloseEvent |
showEvent | 一个窗体显示时触发 | QShowEvent |
hideEvent | 一个窗体隐藏时触发 | QHideEvent |
resizeEvent | 组件改变大小时触发,如一个窗口改变大小时 | QResizeEvent |
focusInEvent | 当一个组件获得键盘焦点时触发,如一个QLineEdit组件获得输入焦点 | QFocusEvent |
focusOutEvent | 当一个组件失去焦点时触发,如一个QLineEdit组件失去输入焦点 | QFocusEvent |
enterEvent | 当鼠标进入组件的屏幕空间时触发,如鼠标移动到一个QPushButton组件上 | QEvent |
leaveEvent | 当鼠标离开组件的屏幕空间时触发,如鼠标离开一个QPushButton组件 | QEvent |
dragEnterEvent | 拖动操作正在进行,鼠标移动到组件上方时触发 | QDragEnterEvent |
dragLeaveEvent | 拖动操作正在进行,鼠标移出组件上方时触发 | QDragLeaveEvent |
dragMoveEvent | 拖动操作正在进行,鼠标移动时触发 | QDragMoveEvent |
dropEvent | 当拖动操作在某个组件上发下时触发 | QDropEvent |
可以在自己的自定义类中使用这些事件。
第十二篇camunda系列-事件篇-信号事件(代码片段)
信号事件1.开始事件 通过信号来启动流程实例部署流程和发送信号来启动流程/***部署流程*/@TestpublicvoiddeployFlow()Deploymentdeploy=repositoryService.createDeployment(< 查看详情
第十二篇camunda系列-事件篇-信号事件(代码片段)
信号事件1.开始事件 通过信号来启动流程实例部署流程和发送信号来启动流程/***部署流程*/@TestpublicvoiddeployFlow()Deploymentdeploy=repositoryService.createDeployment(< 查看详情
linux从青铜到王者第十二篇:linux进程间信号第二篇(代码片段)
系列文章目录文章目录系列文章目录前言一、阻塞信号1.信号其他相关常见概念2.在内核中的表示3.sigset_t信号集4.信号集操作函数5.sigprocmask函数6.sigpending函数二、捕捉信号1.内核实现信号的捕捉2.volatile关键字总结前言一、阻塞信... 查看详情
c++从青铜到王者第二十二篇:c++11(代码片段)
系列文章目录文章目录系列文章目录前言一、C++11简介(了解)二、列表初始化(了解)1.C++98中的初始化问题2.内置类型的列表初始化3.自定义类型的列表初始化三、变量类型推导(了解)1.为什么需要类型推导2.decltype类型推... 查看详情
第二十二篇resnet实战
文章目录摘要 查看详情
linux从青铜到王者第二十二篇:linux高级io(代码片段)
系列文章目录文章目录系列文章目录前言一、五种IO模型1.阻塞IO2.非阻塞IO3.信号驱动IO4.异步IO5.IO多路转接二、高级IO重要概念1.同步通信vs异步通信2.阻塞vs非阻塞三、I/O多路转接之select1.select函数的作用2.select函数的原型3.fd_set结... 查看详情
开始写游戏---第二十二篇
开始写游戏---第二十二篇 今天: 先看看目前战斗场景和昨天的对比 昨天: 1、新增被动技能 2、新增敌人被攻击动画 3、优化动画流畅度 ... 查看详情
第二十二篇信念
第二十二篇 信念 “信念”能带给一个人无穷的力量,这些力量可以支撑自己走过漫长的人生。一个人如果没有信念,就很难找到自己的人生方向,所以“信念”也可以理解为希望。信念可以给到我们希望,也可以给... 查看详情
我的第二十二篇博客---vue
Vue.js基本概念:首先通过将vue.js作为一个js库来使用,来学习vue的一些基本概念,我们下载了vue.js后,需要在页面上通过script标签引入vue.js。开发中可以使用开发版本vue.js。产品上线要换成vue.min.js。<scripttype="text/javascript"src="..... 查看详情
linux篇第十二篇——信号(概念+信号的产生+阻塞信号+捕捉信号)(代码片段)
⭐️本篇博客要给大家介绍一些关于进程间通信的一些知识。其中包括信号是什么,如何产生的,信号如何保存,什么时候处理,如何捕捉信号等等一些问题,在今天的博客中,你都将找到答案。目录dz... 查看详情
第二十二篇flowable之springboot集成flowableui
FlowableUI集成到SpringBootlecture:波波老师一、常见的整合方式 在Flowable工作流开发中大家最为头疼的应该就是流程设计器的整合了。常见的整合方式有两种在实际项目中集成FlowableUI这个官方的设计器通过开源的组件比如Logi... 查看详情
Gstreamer 1.0 - 创建自定义消息/事件/信号
】Gstreamer1.0-创建自定义消息/事件/信号【英文标题】:Gstreamer1.0-Creatingcustommessage/event/signal【发布时间】:2017-12-1216:30:55【问题描述】:我正在用C语言为gstreamer1.0编写一个自定义插件。该插件对帧执行一些处理,并应在满足某些... 查看详情
第二十二篇商城系统-skywalking链路追踪商城系统完结篇(代码片段)
Skywalkingskywalking是一个apm系统,包含监控,追踪,并拥有故障诊断能力的分布式系统一、Skywalking介绍1.什么是SkyWalking Skywalking是由国内开源爱好者吴晟开源并提交到Apache孵化器的产品,它同时吸收了Zipkin/Pinpoint... 查看详情
第二十二篇商城系统-skywalking链路追踪商城系统完结篇(代码片段)
Skywalkingskywalking是一个apm系统,包含监控,追踪,并拥有故障诊断能力的分布式系统一、Skywalking介绍1.什么是SkyWalking Skywalking是由国内开源爱好者吴晟开源并提交到Apache孵化器的产品,它同时吸收了Zipkin/Pinpoint... 查看详情
xamarin效果第二十二篇之录音效果(代码片段)
在前面文章中简单玩了玩GIS的基本操作、Mark相关、AR、测距、加载三维白模和可扩展浮动操作;今天抽空再来分享一下录音效果;啥也不说了都在效果里:1、首次尝试了开源的Plugin.AudioRecorder结果发现没效果,也可能是我的姿势不对:h... 查看详情
pyqt5信号与槽详解
...e("信号与槽函数基础")self.b=QPushButton("我的按钮",self)#利用第二个参数self直接可以显示在窗口,不用布局来进行添加控件#信号与槽函数连接self.b.clicked.connect(self.onclick)#编辑槽函数defonclick(self):self.b.setText("信号已经发出")self.b.setSty... 查看详情
easyclickhtmlui第二十二节jquery事件代理(代码片段)
EasyClickHtmlUI第二十二节jQuery事件代理事件代理介绍事件代理就是利用事件冒泡的原理(事件冒泡就是事件会向它的父级一级一级传递),把事件加到父级上,通过判断事件来源,执行相应的子元素的操作,事件代理首先可... 查看详情
c++从入门到入土第二十二篇:数据结构之红黑树(代码片段)
红黑树文章目录红黑树一、红黑树简介性质节点红黑树的实现一、红黑树红黑树是一种特化的AVL树(平衡二叉树),都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能。... 查看详情