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