Python----PyQt开发(PyQt高级:事件机制:鼠标事件,键盘输入事件,绘图事件,关闭事件,定时器事件)

一、事件机制

1.1、Qt应用程序中的事件的来源

        事件机制是PyQt5核心概念之一,掌握事件机制对于开发GUI应用程序至关重要。在 PyQt5中,事件机制用于处理应用程序与用户之间的交互。其中,事件可以是用户行 为,如按键、鼠标点击、移动窗口等。也可以是系统通知,如定时器触发、网络消息 到达等。

        Qt中的事件来源于系统消息,经Qt平台(QApplication)转换封装为Qt事件。

        Qt事件是一个QEvent对象。

        系统消息主要是操作系统捕捉到的底层软、硬件信息,比如,触屏时触发中断,操作 系统将这个触屏的信息封装成系统消息发送到更上层的平台

        QT的所有GUI程序都是事件驱动的。

1.2、QT事件处理机制

        事件主要由用户触发(用户与界面交互),但也可能有其他触发方式:例如网络连 接、window manager或定时器。

 例如:

        用户移动鼠标,会产生鼠标移动事件

        用户点击鼠标,会产生鼠标点击事件

        用户滚动鼠标滑轮,会产生滑轮事件

        用户键盘输入,会产生键盘输入事件

在事件模型中,有三个参与者:

        事件源:是状态发生变化的对象

        事件对象:封装了事件源中状态的变动

        事件接收者: 是要通知的对象, 事件源对象将事件处理的工作交给事件接收者。

 1.3、事件处理机制

        Qt事件(QEvent对象)产生之后,会被分发到QWidget对象(QWidget是所有与用户 交互类的父类), 在QWidget的event(QEvent*) 函数中进行事件处理,该函数根据事件类型调用不同 的事件处理函数。

例如 : 用户操作鼠标去点击按钮, 有事件对象产生, 按钮对象中的 event() 事件分发函数被 触发,这个函数会根据 事件的类型来判断,如果是鼠标点击事件,就会调用按钮中的鼠标点击事件处理函数! 

1.4、信号与事件关系 

信号是在某一特定事件发生时被触发的

事件-> 对应控件的事件处理函数->触发信号->信号与槽函数关联->执行对应的槽函数 

二、鼠标事件

2.1、鼠标点击事件

mousePressEvent()

根据按钮来判断:QMouseEvent.button()-> Qt.MouseButton 枚举

def mousePressEvent(self, a0):
    # 获取鼠标点击的位置坐标
    x = a0.x()
    y = a0.y()
    
    # 根据鼠标点击的位置更新Label的位置
    self.label.move(x, y)
    
    # 根据不同的按钮判断,输出不同的提示信息
    if a0.button() == Qt.LeftButton:
        print('点击的是左键')
    elif a0.button() == Qt.RightButton:
        print('点击的是右键')
    elif a0.button() == Qt.MidButton:
        print('点击的是中间键')

2.2、鼠标移动事件 

mouseMoveEvent()

    def mouseMoveEvent(self, a0):
        print('鼠标移动到了')
        x=a0.x()
        y=a0.y()
        self.pi_lab.setGeometry(x,y,200,200)

2.3、完整代码 

import sys  # 导入系统模块以处理命令行参数  

from PyQt5.QtCore import Qt  # 导入Qt核心功能  
from PyQt5.QtWidgets import QWidget, QApplication, QLabel  # 导入Qt小部件  
from PyQt5.QtGui import QPixmap  # 导入QPixmap用于处理图像  

class Widge(QWidget):  # 定义一个名为Widge的窗口类,继承自QWidget  
    def __init__(self):  
        super().__init__()  # 调用父类的初始化方法  
        self.label = QLabel('鼠标点击事件', self)  # 创建一个标签显示文本  
        self.label.move(100, 70)  # 移动标签到指定的位置  
        self.pi_lab = QLabel(self)  # 创建一个用于显示图像的QLabel  
        self.pi_lab.setGeometry(100, 120, 200, 200)  # 设置图像标签的位置和大小  
        self.pi_lab.setPixmap(QPixmap('灯泡.jpg').scaled(self.pi_lab.size()))  # 加载图像并调整大小  
        self.setMouseTracking(True)  # 启用鼠标跟踪功能  

    def mousePressEvent(self, a0):  # 鼠标按下事件  
        x = a0.x()  # 获取鼠标点击的x坐标  
        y = a0.y()  # 获取鼠标点击的y
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值