美文网首页
【PyQt】事件机制

【PyQt】事件机制

作者: 4thirteen2one | 来源:发表于2019-05-27 23:35 被阅读0次

信号与槽机制是对事件机制的高级封装
事件机制更偏向于底层

每个 Qt 应用程序对应一个 QAppliation 对象
一个应用程序拥有几个消息队列,应用程序的消息循环,就是在处理这些队列中的消息

用户的操作会产生各种事件消息
消息首先会被操作系统接收,然后操作系统会把消息分发到对应的各应用程序的“消息队列”中

比如分为两个队列:系统产生的消息组成的队列(鼠标事件、键盘事件、拖放事件),程序内部产生的消息组成的队列(定时器事件、绘屏事件)

消息循环:
不断地按顺序检测消息队列中是否有消息
若发现“事件消息”,则包装成“QEvent 对象”进行分发处理

将事件接收者(receiver)和事件对象(evt)传递给 QApplication 对象的 notify(receiver, evt) 方法进行处理

QApplication 对象是否安装事件过滤器(事件过滤器可设置多个,但会按照设置的逆序进行分发)

  • 是:QApplication 对象 n 个事件过滤器 eventFilter(watched, evt) 方法的返回值,若为 True 则不再继续分发(告诉系统该事件已被处理)
  • 否:分发给 receiver 对象的 event(evt) 方法,此方法会根据 evt 的事件类型分发给 receiver 具体的事件函数
    如 mousePressEvent(evt)、mouseReleaseEvent(evt)、mouseClickEvent(evt) 等
    部分控件在这些具体的事件方法中,可能发射了对应的信号(pressed、released、clicked 等)
import sys
form PyQt5.Qt import *
# 通过继承重写方法
class App(QApplication):
    def notify(self, recv, evt):
        if recv.inherits("QPushButton") and evt.type() == QEvent.MouseButtonPress:
            print(recv, evt)
        return super().notify(recv, evt)

class Btn(QPushButton):
    def event(self, evt):
        if evt.type() == QEvent.MouseButtonPress:
            print("按钮被点击咯", evt)
        return super().event(evt)

    def mousePressEvent(self, *args, **kwargs):
        print("鼠标被按下了")
        return super().mousePressEvent(*args, **kwargs)

app = App(sys.argv)

window = QWidget()

btn = Btn(window)
btn.setText("按钮")

def slot():
    print("按钮被点击了")

btn.pressed.connect(slot)

window.show()

sys.exit(app.exec_())

相关文章

  • 2019-02-18 信号和信号槽

    PyQt5:PyQt5 信号与槽(PyQt5的事件处理机制) 一、事件 在事件模型,有三个参与者:事件源、事件目标...

  • 【PyQt】事件机制

    信号与槽机制是对事件机制的高级封装事件机制更偏向于底层 每个 Qt 应用程序对应一个 QAppliation 对象...

  • PyQt5 信号与槽

    PyQt5:PyQt5 信号与槽(PyQt5的事件处理机制) - 老π - 博客园 (cnblogs.com)[h...

  • signal and slot

    信号与槽,是Qt的核心机制,pyqt 是python对Qt的完全封装,因此,信号与槽也是pyqt的核心机制。 通...

  • PyQt5的核心--信号与槽.笔记

    信号与槽是Qt的核心机制,也是PyQt的核心机制 1.信号:是由对象或控件发射出去的消息 比如:按钮的单击事件。当...

  • PyQt5重写回车事件

    PyQt5中的事件处理主要依赖重写事件处理函数,下面重写回车事件,代码如下

  • Android 事件分发机制源码

    Android 事件分发机制源码 Android,事件机制,Android事件分发机制源码 Android Tou...

  • DOM事件概念以及过程

    解释以下概念:事件传播机制、阻止传播、取消默认事件、事件代理 事件传播机制 事件传播机制分为三个阶段 事件捕获阶段...

  • DOM事件概念以及过程

    解释以下概念:事件传播机制、阻止传播、取消默认事件、事件代理 事件传播机制 事件传播机制分为三个阶段 事件捕获阶段...

  • javascript事件

    解释以下概念:事件传播机制、阻止传播、取消默认事件、事件代理。 事件传播机制事件传播机制分为三个阶段 事件捕获阶段...

网友评论

      本文标题:【PyQt】事件机制

      本文链接:https://www.haomeiwen.com/subject/fgdltctx.html