我有一个QPlainTextEdit,并希望在失去焦点时处理内容.我已经看到我可以使用focusChanged事件或使用focusOutEvent虚拟功能执行此操作.

我不知道如何使用新语法传递参数(即my_app.focusChanged.connect(my_handler),其中my_handler是本地定义的函数).所以我尝试使用虚函数.

由于界面是使用QT Designer创建的,继承QPlainTextEdit会是一种过度杀伤,所以我试图通过简单地使用my_text_edit.focusOutEvent = my_handler来覆盖虚函数.这确实拦截了我想要的消息,但它显然覆盖了QPlainTextEdit中的一些内置功能,我得到了人工制品 – 即文本编辑中的光标在失去焦点时不会消失.我想我应该以某种方式调用原始事件,对我有用的是以下内容:

在我的__init__方法中,我有:

self.original_handler = self.my_text_edit.focusOutEvent

self.my_text_edit.focusOutEvent = self.my_handler

my_handler的定义是:

def my_handler(self, event):

self.original_handler(event)

# my own handling follows...

我基本上复制了我期望图书馆为我做的事情.我发现这太笨拙了,我可以看到它在维护过程中会以多种方式适得其反.任何人都可以建议一个更简洁的方法吗?谢谢!

解决方法:

就个人而言,我从不使用覆盖虚拟方法的猴子修补方式,但保留原始行为的正确方法是直接调用基类方法,如下所示:

def my_handler(self, event):

QtGui.QPlainTextEdit.focusOutEvent(self.my_text_edit, event)

# my own handling follows...

但我不明白为什么你不能使用focusChanged信号.它的处理程序只是:

def my_handler(self, old, new):

if old is self.my_text_edit:

print('focus out')

elif new is self.my_text_edit:

print('focus in')

但是,我自己的偏好是使用event filter:

class Window(QtGui.QMainWindow)

def __init__(self):

...

self.my_text_edit.installEventFilter(self)

def eventFilter(self, source, event):

if (event.type() == QtCore.QEvent.FocusOut and

source is self.my_text_edit):

print('eventFilter: focus out')

# return true here to bypass default behaviour

return super(Window, self).eventFilter(source, event)

这是一个更加灵活的解决方案,它为通过Qt Designer导入的任何窗口小部件(或者实际上是您不想要子类的任何窗口小部件)提供了处理任何event type的通用方法.

widget promotion也有可能用于直接用你自己的子类替换生成的ui模块中的小部件.这将允许您通过继承覆盖任何虚拟方法,而不是猴子修补单个实例.如果要从Qt Designer导入多个相同类型的小部件,这些小部件共享许多自定义功能,这可以提供非常干净的解决方案.

关于如何在PyQt中进行小部件升级的简单解释可以在我的答案中找到:Replace QWidget objects at runtime.

标签:python,qt,pyside

python设置窗口焦点_python – 当窗口小部件失去焦点时,我如何拦截相关推荐

  1. python窗口居中_Python: tkinter窗口屏幕居中,设置窗口最大,最小尺寸实例

    我就废话不多说了.大家直接看代码吧! #!/usr/bin/env python #coding=utf-8 ''' 窗口屏幕居中,设置窗口最大,最小尺寸... 版权所有 2014 yao_yu (h ...

  2. python窗口显示文本tk_python-Tkinter文本小部件设置选项卡

    我必须将文本小部件的标签大小设置为4个字符.当我做 textwidget.config(tabs =(" 4c"," 8c"))我没有得到所需的结果.它的制表符 ...

  3. python tkinter控件_Python——Tkinter窗口的函数,Pythontkinter,视窗,功能,部件

    tkinter简介 Tkinter 是使用 python 进行窗口视窗设计的模块.Tkinter模块("Tk 接口")是Python的标准Tk GUI工具包的接口.作为 pytho ...

  4. python设置环境变量_Python设置环境变量

    python设置环境变量 We can set an environment variable in Python using os module. Python os module environ ...

  5. python写窗体程序_python写窗口

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 最近在学习 pyqt5 gui 编程,大致路线是找了套网课<撩课-pyth ...

  6. python cmd窗口名字_python cmd 窗口 中文乱码 解决方法 (附:打印不同颜色)

    python cmd 窗口 中文乱码 解决方法 (附:打印不同颜色) 前言 在 python 开发中,有时候想通过cmd窗口来和用户交互,比如显示信息之类的,会比自己创建 GUI 来的方便,但是随之而 ...

  7. python文件闪退_python运行窗口闪退(python打开文件出现闪退什么原因)

    有时候,我们在运行python程序的时候会闪退,到底是什么原因呢?python文件是以.py结尾的,可以自己在python环境下运行的.对于这种闪退的情况,大概可以从以下几个方面分析. 第一步 首先找 ...

  8. python的ols回归_Python滚动窗口OLS回归估计

    下面是使用statsmodels进行OLS滚动的概要,应该对您的数据有效.只需使用df=pd.read_csv('estimated_pred.csv')而不是我随机生成的df:import pand ...

  9. Python设置画布大小_Python 之 Tkinter Canvas画布

    定义: Canvas画布:画布控件用于将结构化图形的Python应用.主要用于绘制图表和曲线图. 语法格式: 可能选项的列表如下 选项 描述 bd 表示该边界的宽度,默认的宽度是 2  bg 它代表了 ...

最新文章

  1. 不使用任何框架实现CNN网络
  2. Sorting It All Out--POJ 1094
  3. linux消息信号丢失,Linux信号丢失问题分析
  4. 什么是 PureMVC 框架(提供下载)
  5. 实验三_166_张珍珍
  6. Mac Oracle SQL Developer “欢迎使用“页卡死,解决办法
  7. 查找Linux中内存和CPU使用率最高的进程
  8. 雷蛇键盘灯光配置文件_指尖的流光溢彩,雷蛇黑寡妇蜘蛛V3竞技版开箱
  9. 【Python可视化】Windows 10系统上Pyecharts安装教程
  10. 2015蓝桥杯省赛---java---B---10(生命之树)
  11. Kafka 源码解析:Server 端的运行过程
  12. (94)分频器设计(奇数分频)
  13. HDU-4631 Sad Love Story 平面最近点对
  14. uniapp苹果底部栏自适应配置
  15. android AChartEnginee讲解之源码框架解读
  16. 基于STC89C51和L298N的42步进电机控制
  17. mac使用word怎么显示左侧目录树
  18. 极大团与networkx Bron-Kerbosch算法源码解读
  19. 又拍云php表单,又拍云php版Token授权防盗链整理 - YangJunwei
  20. 图书管理系统(图书类)

热门文章

  1. LaTex中的绝对值符号
  2. Eclipse: The superclass “jakarta.servlet.http.HttpServlet“ was not found on the Java Build Path
  3. 用shtml来include网页文件(开启SSI)
  4. 计算机视觉——图像搜索
  5. 详解如何安装64位win7系统
  6. 五年级孩子学python-五年级的孩子学编程有没有意义?
  7. 1379: C语言合法标识符
  8. P1379-八数码难题(BFS+A*)(代码带详细注释)
  9. 产品市场管理与产品规划
  10. 西柏办公用品管理系统(含源代码)