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