IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python 使用installEventFilter(filterObj)方法实现QTextEdit输入内容keyPressEvent的过滤 -> 正文阅读

[Python知识库]Python 使用installEventFilter(filterObj)方法实现QTextEdit输入内容keyPressEvent的过滤

实现QTextEdit输入内容的过滤有两种方法,一种是通过重载QTextEdit的keyPressEvent()方法实现,简单举个例子实现只能在QTextEdit中只能输入16进制的数::

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QTextEdit
from PyQt5.QtGui import QKeyEvent
import string


class KeyEventDemo(QWidget):
	def __init__(self):
		super(KeyEventDemo, self).__init__()
		self.resize(500, 500)
		self.setMouseTracking(False)
		self.te = TextEdit()
		self.te.setParent(self)


class TextEdit(QTextEdit):
	def __init__(self):
		super(TextEdit, self).__init__()

	def keyPressEvent(self, e: QKeyEvent) -> None:
		QTextEdit.keyPressEvent(self, e)
		# 下面写自己需要过滤的代码
		if e.text() not in string.hexdigits:  # 只有当输入的字符为a时才能显示在QTextEdit中
			if e.key() != 16777219:
				self.textCursor().deletePreviousChar()


if __name__ == "__main__":
	app = QApplication(sys.argv)
	window = KeyEventDemo()
	window.show()
	sys.exit(app.exec_())

还可以通过installEventFilter(filterObj)方法实现,推荐这种,下面的例子是实现只能在QTextEdit中只能输入16进制的数:
?

import sys
import string
from PyQt5.QtWidgets import QApplication, QWidget, QTextEdit
from PyQt5.QtCore import QEvent, QObject


# 首先创建一个KeyPressEster类,用于拦截监控对象的按键
class KeyPressEster(QObject):
	def eventFilter(self, a0: 'QObject', a1: 'QEvent') -> bool:  # a0为当前监控的对象,a1为触发的事件
		if a1.type() == QEvent.KeyPress:
			print("按键:", a1.text())
			if a1.text() in string.hexdigits:  # 只能输入16进制的数
				a0.textCursor().insertText(a1.text())
			if a1.key() == 16777219:  # 当按下推个键时,删除字符
				a0.textCursor().deletePreviousChar()
			return True
		else:
			return QObject.eventFilter(self, a0, a1)


class FilterDemo(QWidget):
	def __init__(self):
		super(FilterDemo, self).__init__()
		self.resize(500, 500)
		self.te = QTextEdit(self)
		keyPressEster = KeyPressEster(self)  # 实例化按键拦截实例
		self.te.installEventFilter(keyPressEster)  # 安装过滤器


if __name__ == "__main__":
	app = QApplication(sys.argv)
	window = FilterDemo()
	window.show()
	sys.exit(app.exec_())

其他控件也可以设置过滤器,这种方法个人感觉很好用。

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-03-10 22:27:16  更:2022-03-10 22:29:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 21:56:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码