第二十二篇--事件与信号(自定义label信号的双击功能)(代码片段)

smart-zihan smart-zihan     2023-03-20     750

关键词:

在第六篇中已经学习过了自定义信号的相关内容了,那一篇中讲的是自定义类中的自定义信号,类和信号都是自己定义的。那么今天想要学习的是事件处理和信号的关系。如同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树(平衡二叉树),都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能。... 查看详情