美文网首页
PyQt 用 eventFilter 拦截子控件的响应

PyQt 用 eventFilter 拦截子控件的响应

作者: Hemmelfort | 来源:发表于2019-09-25 17:37 被阅读0次

网上找不到关于 PyQt 使用 eventFilter (事件过滤器)的详细介绍,只好自己动手。

🌙 近水楼台先得月,在 Qt 中,子控件往往是离事件最近的部分,每一次用户键盘或鼠标的输入都率先由子控件来响应。于是父控件就连汤都喝不上。比如以下的窗口,即使你在父窗口的 keyPressEvent 里设置好了按 Esc 键退出,但只要焦点在文本框中,这个按键就无效。

父控件 vs 子控件

🌞 这时候就要用到 eventFilter 事件过滤器,一个比 keyPressEvent 更底层的东西。

任何一个 Qt 控件,只要定义了 eventFilter 方法,都可以被当作一个过滤器。

完整结构:

class Father(QWidget):
    def __init__(self):
        self.text_editor.installEventFilter(self)  # 把自己当成一个过滤器安装到儿子身上

    def eventFilter(self, obj, event):
        if obj == self.text_editor:
            if event.type() == QEvent.KeyPress and event.key() == Qt.Key_Escape:
                self.close()
                return True  # 说明这个事件已被处理,其他控件别插手

        return QObject.eventFilter(self, obj, event)  # 交由其他控件处理

🌟 只要在 eventFilter 中返回 True,就能防止该事件被子控件得到。这样就实现了在父控件里处理用户输入事件的目的。

相关文章

  • PyQt 用 eventFilter 拦截子控件的响应

    网上找不到关于 PyQt 使用 eventFilter (事件过滤器)的详细介绍,只好自己动手。 ? 近水楼台先得...

  • pyqt学习资料搜集

    1、PyQt5图形界面编程 2、PyQt5高级界面控件之QThread(十二) 3、使用Pyqt实现简单证券量化分...

  • pyqy5——控件2

    控件2 本章我们继续介绍PyQt5控件。这次的有QPixmap,QLineEdit,QSplitter,和QCom...

  • 响应者链

    1.1 响应者链 当与某控件交互时,该控件将作为"第一响应者 (First Responder)",作为响应者链的...

  • UIButton 扩大按钮的响应区域(runtime)

    前言 APP产品中不乏一些图标很小的,但需要响应的按键或者控件。如果这些需要响应的控件实际响应范围跟其响应的实际大...

  • mac 安装pyqt

    (安装pyqt,建议使用brew install pyqt 命令安装,楼主之前用源码安装,好多坑,用brew in...

  • 父布局拦截子控件焦点事件

    在xml中对需要的父控件添加 android:descendantFocusability 属性。 对应的值分别有...

  • 下载安装发布PyQt5程序

    下载安装发布PyQt5程序 安装PyQt5pip isntall pyqt5 编写demo 用pyinstalle...

  • Shiny学习(四)||响应式输出

    Shiny应用程序中控件选中的值可以通过生成响应式输出来显示。用户切换控件的值,输出的文本也随着控件的值自动响应。...

  • pyqt5——自定义控件

    自定义控件 PyQt5有丰富的组件,但是肯定满足不了所有开发者的所有需求,PyQt5只提供了基本的组件,像按钮,文...

网友评论

      本文标题:PyQt 用 eventFilter 拦截子控件的响应

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