首页 > 其他分享 >Pyqt6&PySide6 事件与事件的处理函数

Pyqt6&PySide6 事件与事件的处理函数

时间:2024-05-18 21:08:05浏览次数:9  
标签:Qt self Pyqt6 label MouseButton PySide6 事件 button 处理函数

什么是事件?

事件是程序收到外界的输入,处于某种状态时自动发送的信号。事件有固定的类型,每种类型有自己的处理函数,用户只要重写这些函数,即可达到特定的目的。通过事件可以用一个控件监测另外一个控件,并可过滤被监测控件发出的事件。

事件的类型与处理函数

事件的概念与实列

外界对PySide程序进行输入信息的过程称为事件,列如在窗口上单击鼠标,输入框中输入数据等,只要是外界对程序的输入,都可以称为事件。程序对外界的输入进行处理的过程称为事件处理,根据外界输入信息的不同,处理事件的函数也是不同的。

事件与信号/槽相似,但是又有不同。信号是指控件或窗口本身满足一定条件时,发送一个带数据的信息或不带数据的信息,需要编程人员为这个信息单独写处理这个信息的槽函数,并将信号和槽函数关联,发送信号时,自动执行与之关联的槽函数。而事件是外界对程序的输入,将外界的输入进行分类后交给函数处理,处理事件的函数是固定的,只需要编程人员把处理事件的函数重写,来达到处理外界输入的目的,而不需要将事件与处理事件的函数进行连接,系统会自动调用能处理事件的函数,并把相关数据作为实参传递给处理事件的函数。

下面是一个处理鼠标单击事件的程序,在窗口的空白处单击鼠标左键或右键,将会产生QMouseEvent事件,QMouseEvent事件的实例对象中有与鼠标事件相关的属性,如button()方法获取单击的是左键还是右键。QWidget窗口处理QMouseEvent事件的函数有mouseDoubleClickEvent(QMouseEvent)mouseMoveEvent(QMouseEvent)mousePressEvent(QMouseEvent)mouseReleaseEvent(QMouseEvent)moveEvent(QMoveEvent)

import sys
from PySide6.QtWidgets import (
    QApplication,
    QMainWindow,
    QVBoxLayout,
    QHBoxLayout,
    QStackedLayout,
    QLineEdit,
    QPushButton,
    QWidget,
    QTabWidget,
    QLabel,
    QToolBar,
    QWidgetAction,
    QDialog,
    QMessageBox,
)
from PySide6.QtCore import Qt
from PySide6.QtGui import QIcon


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.label = QLabel("Click in this window")
        self.setCentralWidget(self.label)

    def mousePressEvent(self, e):   # 鼠标点击事件处理程序
        if e.button() == Qt.MouseButton.LeftButton:
            self.label.setText("mousePressEvent LEFT")
        elif e.button() == Qt.MouseButton.MiddleButton:
            self.label.setText("mousePressEvent MIDDLE")
        elif e.button() == Qt.MouseButton.RightButton:
            self.label.setText("mousePressEvent RIGHT")

    def mouseReleaseEvent(self, e):     # 鼠标释放事件处理程序
        if e.button() == Qt.MouseButton.LeftButton:
            self.label.setText("mouseReleaseEvent LEFT")
        elif e.button() == Qt.MouseButton.MiddleButton:
            self.label.setText("mouseReleaseEvent MIDDLE")
        elif e.button() == Qt.MouseButton.RightButton:
            self.label.setText("mouseReleaseEvent RIGHT")

    def mouseDoubleClickEvent(self, e):
        if e.button() == Qt.MouseButton.LeftButton:
            self.label.setText("mouseDoubleClickEvent LEFT")
        elif e.button() == Qt.MouseButton.MiddleButton:
            self.label.setText("mouseDoubleClickEvent MIDDLE")
        elif e.button() == Qt.MouseButton.RightButton:
            self.label.setText("mouseDoubleClickEvent RIGHT")


app = QApplication(sys.argv)
window = MainWindow()
window.show()

app.exec()

QEvent类

QEvent类是所有事件的基类,它在QtCore模块中。外界输入给程序的信息首先交给QEvent进行分类,得到不同类型的事件,然后系统将事件及相关信息交给控件或窗口的事件处理函数进行处理,得到对外界输入的响应。QEvent类的属性只有accepted

img

标签:Qt,self,Pyqt6,label,MouseButton,PySide6,事件,button,处理函数
From: https://www.cnblogs.com/holychan/p/18189337

相关文章

  • Pyqt6&Pyside6 信号与槽详解
    信号与槽对于可视化编程,需要将界面上的控件有机结合起来,实现控件功能的联动和交互操作。比如点击按钮,实现某项功能。对按钮功能的定义,是通过信号(signal)与槽(slot)机制实现的。信号与槽是PySide6编程的基础,也是Qt的一大创新,有了信号与槽的编程机制,在PySide6中处理界面上各个控件......
  • 事件处理函数中, e.stopPropagation()能放在 onChangeColor()后边执行吗?
    在JavaScript事件处理中,e.stopPropagation()的作用是阻止事件向上冒泡到父元素,也就是说,它防止当前元素的事件继续传播到DOM树上的其他事件监听器。因此,它的位置对于事件流的行为至关重要。将e.stopPropagation()放在onChangeColor()后面执行,在大多数情况下不会改变onChange......
  • 双向循环链表的插入处理函数接口
    //方便访问,创建一个带头结点的双向循环链表//链表数据域取别名方便修改typedefintDataType_t;//构造双向循环链表的结点typedefstructDoubleCircularLList{DataType_tdata;//数据域structDoublLingkedList*prev;//直接前驱指针域......
  • 【C语言学习】之字符数组与字符串处理函数
    1.字符数组1.字符数组的初始化1.单字符形式chara[3]={'a','b','c'}                定义一个字符型一维数组,数组名a,三个下表变量a,b,ccharb[][3]={'a','b','c','d','e','f','g'}  ......
  • 【C语言基础篇】字符串处理函数(四)strcmp的介绍及模拟实现
    目录 一、strcmp函数介绍函数原型函数参数功能描述返回值使用示例二、strcmp函数模拟实现思路代码测试         个人主页:    倔强的石头的博客        系列专栏 :C语言指南         C语言刷题系列  系列文章【C语言基础篇......
  • oracle逐行处理函数LAG
    在Oracle中,要计算一个列除以上一行的同一列值,可以使用LAG函数来获取上一行的值。以下是一个示例SQL查询,它使用LAG来计算当前行除以上一行的同一列值: SELECTcolumn_value,column_value/LAG(column_value)OVER(ORDERBYsome_order_column)ASdivision_resultFROMyour......
  • PySide6:使用Python第三方库的隐蔽问题
    PySide6:使用Python第三方库的隐蔽问题问题描述PySide6使用QChart的问题,我在自己机器上和服务器上都发现无法导入QChart模块,可是我用PySide6的其他模块就好好的...解决方案鉴于PySide6官网都是直接这样导入模块的,因此肯定不是代码的问题。遂怀疑是所安装的PySide6不全。当前......
  • 基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的景区垃圾识别系统(Python+PySide6界面+训练代码)
    摘要:本文介绍了一个先进的基于深度学习的景区垃圾检测系统,该系统集成了最新的YOLOv8算法,并与YOLOv7、YOLOv6、YOLOv5等前代算法进行了性能对比,通过对比实验证明了其在图像、视频、实时视频流和批量文件处理中对景区垃圾进行精确识别和分类的能力。文章深入讲解了YOLOv8算法的工作......
  • 基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的人脸表情识别系统(附完整资源+PySide6界面+训练代码
    摘要:本篇博客呈现了一种基于深度学习的人脸表情识别系统,并详细展示了其实现代码。系统采纳了领先的YOLOv8算法,并与YOLOv7、YOLOv6、YOLOv5等早期版本进行了比较,展示了其在图像、视频、实时视频流及批量文件中识别人脸表情的高准确度。文章深入阐释了YOLOv8的工作机制,并配备了相应......
  • 基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的血细胞检测与计数系统(Python+PySide6界面+训练代码
    摘要:本文介绍了一种基于深度学习的血细胞检测系统系统的代码,采用最先进的YOLOv8算法并对比YOLOv7、YOLOv6、YOLOv5等算法的结果,能够准确识别图像、视频、实时视频流以及批量文件中的血细胞。文章详细解释了YOLOv8算法的原理,并提供了相应的Python实现代码、训练数据集,以及基于PySid......