PySide6 事件详细教程

在PySide6中,事件是GUI应用程序中用户交互和其它系统事件的基本构成块;PySide6中的事件允许您捕获和处理各种类型的事件,从而实现对用户界面的交互和响应;

事件类

PySide6提供了许多不同类型的事件类,以下是一些常见的PySide6事件类,用于处理各种情况:

  • QMouseEvent:鼠标事件类,用于处理与鼠标交互相关的事件,如鼠标的点击、移动等;
  • QKeyEvent:键盘事件类,用于处理键盘按键事件,如按下、释放等;
  • QFocusEvent:焦点事件类,用于处理组件获得或失去焦点的事件;
  • QResizeEvent:窗口大小调整事件类,用于处理窗口大小
  • QMoveEvent
  • QPaintEvent
  • QDragEnterEvent
  • QDragMoveEvent
  • QDropEvent
  • QTimerEvent
  • 自定义事件类:
  • 其它事件

事件处理方法

在PySide6中,您可以通过重写特定事件处理方法来响应不同类型的事件。每个事件类(如QKeyEvent)都对应着一些特定的方法,你可以在您自定义类中重写这些方法来处理相应类型的事件;

下面是一个重写QWidget类keyPressEvent方法的简单例子:

import sys
from PySide6.QtWidgets import (QApplication, QWidget, QStyleFactory,
         QLabel)
from PySide6.QtGui import QKeyEvent

class MainWidget(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.resize(300, 200)
        self.setWindowTitle("重写keyPressEvent事件")
        self.label = QLabel("Press a key",self)
        self.label.move(50,50)

    def keyPressEvent(self,event:QKeyEvent):
        self.label.setText(f"你按下了 {event.text()}")

if __name__ == '__main__':
    app = QApplication(sys.argv)
    app.setStyle(QStyleFactory.create("Fusion"))
    window = MainWidget()
    window.show()
    sys.exit(app.exec())

当有键盘按键按下时,self.keyPressEvent(event)方法会被调用,参数event是相应事件类的实例,这里是QKeyEvent类的实例;

除了可以重写事件处理函数外,还可以通过重定向来实现:

    self.keyPressEvent = self.other_method

def other_method(self,event):
    pass

以下是一些常见事件对应的方法:

  • mousePressEvent(event):处理鼠标按下事件;
  • mouseReleaseEvent(event):处理鼠标释放事件;
  • mouseMoveEvent(event):处理鼠标移动事件;
  • mouseDoubleClickEvent(event):处理鼠标双击事件。
  • keyPressEvent(event):处理键盘按键按下事件。
  • keyReleaseEvent(event):处理键盘按键释放事件
  • focusInEvent(event):处理组件获得焦点事件
  • focusOutEvent(event):处理组件失去焦点事件。
  • resizeEvent(event):处理窗口大小调整事件。
  • moveEvent(event):处理窗口移动事件。
  • paintEvent(event):处理绘图事件,用于自定义绘制。
  • timerEvent(event):处理定时器事件。
  • dragEnterEvent(event):处理拖放进入事件。
  • dragMoveEvent(event):处理拖放移动事件。
  • event(event):处理自定义事件,您可以在其中判断事件类型并执行相应操作。

原创内容,如需转载,请注明出处;

本文地址: https://www.perfcode.com/pyside6-events

分类: 计算机技术
推荐阅读:
TypeError: can't take floor or mod of complex number. 在Python中,复数类型不支持地板除(floor division)和取模(modulo)运算。因此,在尝试对复数执行//、%或divmod()函数运算时,会引发TypeError异常,提示can't take floor or mod of complex number.
Golang安装gin库的详细教程及错误解决方法 Gin是用Go(Golang)编写的Web框架。 它具有类似于martini的API,其性能比httprouter快40倍。 如果您需要性能和良好的生产率,您会喜欢Gin
requests使用代理进行网络请求 requests支持HTTP、HTTPS、SOCKS等代理请求;如果要使用HTTP代理或HTTPS代理,你可以在任意请求方法中传入proxies参数来配置单个请求:
Requests详细教程 Requests 是一个功能强大、优雅而简单的 Python HTTP库;使用Requests发送网络请求整个过程将变得非常简单。
Golang实现判断文件或文件夹是否存在 golang通过使用 os包中的Stat()函数和IsNotExist()函数即可判断文件或文件夹是否存在。
使用Rust serde处理文件(读取、保存) 本文使用serde_json为例;展示Rust serde如何读取文件、保存文件;