pyqt5-事件

发布时间 2023-04-16 23:40:08作者: 挖洞404

1、介绍

pyqt提供了事件机制使用户和程序进行交互。

2、xxed方法

组件的类中声明的类似xxed形式的方法,用于表示事件,使用时将其调用connect方法,指定处理方法。

示例:

xx.clicked.connect(self.opt)
  • 绑定组件对象的鼠标单击事件,如果触发,则调用opt方法

3、xxEvent方法

组件的类中声明xxEvent形式的方法,也是用于事件。有两种使用方式:

(1)如果当前类继承了QWidget,那么直接在当前类声明对应的xxEvent方法,写入操作的代码即可,当对应的事件发生时,则会调用该方法

(2)如果当前类没有继承QWidget,即是通过load加载ui文件实现布局。那么也可以在当前类声明对应的xxEvent方法,写入操作的代码,然后将xxEvent方法赋值给待监听对象的xxEvent

class my_window:
    def __init__(self):
        self.ui = loadUi('ui\\main_window_2.ui')
        self.ui: QMainWindow
        self.ui.enterEvent= self.enterEvent
        # 显示窗口
        self.ui.show()
    def enterEvent(self, QEvent):
        print("鼠标进来了")

4、event方法

def event(self, QEvent): 
    """ event(self, QEvent) -> bool """
    return False
  • 其和xxxEvent方法使用类似
  • 参数是事件对象,如果被触发,返回bool类型的True
  • pyqt不建议使用该方法,而是重写具体的事件方法xxxEvent

5、信号机制

pyqt的信号机制有四个角色:

  • 发送者:即产生信号的来源,可以是某一组件,也可能是键盘、鼠标等
  • 信号:即事件类型,比如鼠标点击、键盘按下、状态改变、文本改变等
  • 接受者:接收信号的组件,一般来说就是发送者自身组件
  • 槽:也称为槽函数,是用于处理信号的方法,在接收信号的同时,可能还会接收一些其他信息,比如index、鼠标位置等

6、sender方法

sender(self) -> QObject
  • 该方法返回一个QObject对象
  • 作用是:在一个窗口中,多个组件的事件绑定到同一方法。在该方法中,可以调用当前窗口对象的sender方法,获取触发该方法的对象。
  • 实际测试,只要是有效的对象,调用sender方法都可以成功获取。比如窗口对象、groupBox分组、按钮本身测试都实现

7、快捷键

7.1 setShortcut方法

"""
直接为组件设置快捷键,不区分事件类型,会调用该组件各种事件绑定的所有方法
"""
self.ui.pushButton_2.setShortcut('A')
self.ui.pushButton_2.setShortcut('shift+p')

7.2 声明

声明后即可使用,不需要再绑定到对象或者调用其方法

"""
以下声明可以为指定组件对象,调用指定方法
需要注意,基于该快捷键激活,此时sender方法获取到的是QShortcut对象
"""
QShortcut(QKeySequence("Escape"), self.ui.pushButton, self.click)