首页 > 其他 > 详细

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

时间:2020-05-04 14:51:46      阅读:50      评论:0      收藏:0      [点我收藏+]

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

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

原文:https://www.cnblogs.com/smart-zihan/p/12826422.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!