3.1 PyQt5事件、信号和槽的机制原理--事件处理机制讲解

一、事件处理机制讲解

1.基础知识

1>Pyqt提供了两种机制:

  • 高级的信号与槽机制(上层):只能解决窗口控件的某些特定行为,相当于功能的细化
  • 低级的事件处理机制(底层):可以对窗口控件进行更深层次的研究,如自定义窗口
  • 不断进行分发:notify是pyqt5中的

2>区别

  • 事件相当于创建窗口控件的
  • 信号和槽就是对这个窗口控件进行使用的

3>常见的QT事件

  • 键盘事件:按键按下和松开
  • 鼠标事件:鼠标指针移动、鼠标按键按下和松开
  • 拖放事件:用鼠标进行拖放
  • 滚轮事件:鼠标滚轮滚动
  • 绘屏事件:重绘屏幕的某些部分
  • 定时事件:定时器到时
  • 焦点事件:键盘焦点移动
  • 进入和离开事件:鼠标指针移入Widget内,或者移出
  • 移动事件:Widgt的位置改变
  • 大小改变事件:Widgt的大小改变
  • 显示和隐藏事件:Widgt的显示和隐藏
  • 窗口事件:窗口是否为当前窗口
  • 还包括:Socket事件,剪贴板事件,字体改变事件,布局改变事件等

4>使用事件处理的方法
5种事件处理和过滤方法(由弱到前,前两种方法使用最频繁)

  • 重新实现事件函数:mousePressEvent(),keyPressEvent(),paintEvent(),这是最常规的事件处理方法
  • 重新实现QObject.event():一般没有提供该事件的处理函数的情况下,即增加新事件时
  • 安装事件过滤器:QObject调用installEventFilter
  • 在QApplication中安装事件过滤器
  • 重新实现QApplication的notify()方法

2.代码

from PyQt5.Qt import *
import sys

class Window(QWidget) :
    def __init__(self) :
        super().__init__()
        self.setWindowTitle('事件机制')
        self.resize(600, 450)
        self.move(300, 300)


class Btn(QPushButton) :
    def __init__(self, *args, **kwargs) :
        super().__init__(*args, **kwargs)
        self.move(60, 60)
        self.resize(100, 60)
        self.setText('按钮控件')
        self.setStyleSheet('background-color:green')

    # 事件处理方法
    def event(self, evt) :
        print(evt, '事件机制')
        return super().event(evt)  #引用父类中的方法,对下面分发,不写会崩溃,因为会丧失原有的功能

    def mousePressEvent(self, evt) :
        print("鼠标按下事件")
        return super().mousePressEvent(evt)


if __name__ == '__main__' :
    app = QApplication(sys.argv)
    window = Window()
    btn = Btn(window)

    #pressed信号和myslot槽,对于事件所不能处理的行为,进行补充
    def myslot() :
        print('事件机制')
    btn.pressed.connect(myslot)

    window.show()
    sys.exit(app.exec_())

3.程序结果

posted @   Trouvaille_fighting  阅读(624)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示

目录导航