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_())
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)