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


    在第六篇中已经学习过了自定义信号的相关内容了,那一篇中讲的是自定义类中的自定义信号,类和信号都是自己定义的。那么今天想要学习的是事件处理和信号的关系。如同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

    可以在自己的自定义类中使用这些事件。

  • 相关阅读:
    Android开发之JSON数据发送与获取
    Layouts之TableLayout表格布局
    Layouts之GridLayout网格布局
    Android WiFi模块学习
    关于Fragment的讲解及适配
    hive 压缩全解读(hive表存储格式以及外部表直接加载压缩格式数据);HADOOP存储数据压缩方案对比(LZO,gz,ORC)
    Dynamics CRM SQL转化为FetchXML的在线转化工具
    Dynamics CRM 通过Odata创建及更新记录各类型字段的赋值方式
    shell命令执行hive脚本(hive交互,hive的shell编程)
    CRM 2013 Script Loading Deep Dive
  • 原文地址:https://www.cnblogs.com/smart-zihan/p/12826422.html
Copyright © 2020-2023  润新知