当前位置: 首页 > news >正文

【Python_PySide6学习笔记(三十九)】基于QLineEdit实现自定义文本框,用于格式化文本,每四个字符后添加一个空格

基于QLineEdit实现自定义文本框,用于格式化文本,每四个字符后添加一个空格

    • 基于QLineEdit实现自定义文本框,用于格式化文本,每四个字符后添加一个空格
    • 前言
    • 1、实现要点
      • 1.1 继承和初始化
      • 1.2 定义textChanged的槽函数
      • 1.3 格式化逻辑
      • 1.4 保持光标位置正确
    • 2、完整代码
    • 3、使用方法

基于QLineEdit实现自定义文本框,用于格式化文本,每四个字符后添加一个空格

前言

在GUI界面设计领域中,经常遇到需要对用户输入进行特定格式处理的需求,特别是在处理如通讯报文这类需要精确字符分隔的文本时。本文旨在介绍一个精心设计的类,该类基于 PyQt 框架中的 QLineEdit 控件,通过继承与扩展,实现了一个自定义的文本框控件。此控件不仅能够接收用户的文本输入,还能自动地在每输入四个字符后插入一个空格,从而极大地简化了文本格式化的过程,提升了用户体验和数据处理的效率。
在这里插入图片描述

1、实现要点

1.1 继承和初始化

首先,我们需要定义一个全新的类,这个类将继承自Qt框架中的QLineEdit类。在这个自定义的类中,我们将拥有更多的控制权,以便根据特定的显示需求进行定制。

在构造函数的实现中,我们不仅仅实例化这个类,还会执行一些基础的初始化设置。这些设置可能包括调整文本输入框的字体样式、颜色等属性,以确保它能够以期望的方式呈现给用户。通过精细调整这些参数,我们可以使得文本框更加符合应用的界面风格和用户体验要求。

1.2 定义textChanged的槽函数

为了捕获用户的输入事件并进行格式化处理,可以选择重写 keyPressEvent() 方法或连接textChanged() 信号到自定义的槽函数。在这些方法中,根据输入的内容动态地调整文本框中的字符串,确保每四个字符后都包含一个空格。

1.3 格式化逻辑

实现格式化逻辑时,可以通过遍历当前文本框中的字符串,并使用字符串操作函数来在每四个字符后插入空格。同时,需要注意边界条件和特殊情况的处理,比如处理空字符串、字符串长度不是4的倍数等情况。

1.4 保持光标位置正确

为了提供更好的用户体验,可以在格式化过程中保持光标位置正确,避免因为插入空格而导致光标位置意外跳转,影响用户输入体验。

2、完整代码

from PySide6.QtWidgets import QLineEdit
from PySide6.QtCore import Slotclass ctQLineEdit(QLineEdit):def __init__(self, parent=None):super().__init__(parent)self.textChanged.connect(self.on_text_changed)# 用于跟踪没有空格的文本self._last_clean_text = ""@Slot(str)def on_text_changed(self, text):# 移除所有空格以获取“干净”的文本clean_text = text.replace(" ", "")# 如果“干净”的文本与上次的不同,说明有实际的文本变化if clean_text != self._last_clean_text:# 重新格式化文本,每四个字符后添加一个空格formatted_text = ' '.join(clean_text[i:i + 4] for i in range(0, len(clean_text), 4))# 更新文本并设置光标位置(可选,但可以提高用户体验)self.setText(formatted_text)# 注意:设置文本后,光标可能会移动到末尾,你可能需要根据需要调整它# 更新“干净”的文本,以便下次比较self._last_clean_text = clean_text

3、使用方法

from PySide6.QtWidgets import QApplication, QLineEdit, QMainWindow, QVBoxLayout, QWidget
from PySide6.QtCore import Slotclass ctQLineEdit(QLineEdit):def __init__(self, parent=None):super().__init__(parent)self.textChanged.connect(self.on_text_changed)# 用于跟踪没有空格的文本self._last_clean_text = ""@Slot(str)def on_text_changed(self, text):# 移除所有空格以获取“干净”的文本clean_text = text.replace(" ", "")# 如果“干净”的文本与上次的不同,说明有实际的文本变化if clean_text != self._last_clean_text:# 重新格式化文本,每四个字符后添加一个空格formatted_text = ' '.join(clean_text[i:i + 4] for i in range(0, len(clean_text), 4))# 更新文本并设置光标位置(可选,但可以提高用户体验)self.setText(formatted_text)# 注意:设置文本后,光标可能会移动到末尾,你可能需要根据需要调整它# 更新“干净”的文本,以便下次比较self._last_clean_text = clean_textclass MainWindow(QMainWindow):def __init__(self):super().__init__()# 设置窗口大小(可选)self.setFixedSize(400, 100)# 创建中心部件central_widget = QWidget()self.setCentralWidget(central_widget)self.setWindowTitle("每四个字符空一格的文本框")# 创建布局layout = QVBoxLayout(central_widget)# 创建自定义的 QLineEditself.line_edit = ctQLineEdit(self)# 将 QLineEdit 添加到布局layout.addWidget(self.line_edit)# 创建 QApplication 实例app = QApplication([])# 创建 MainWindow 实例并显示
window = MainWindow()
window.show()# 运行应用程序
app.exec()
http://www.lryc.cn/news/467442.html

相关文章:

  • 23种设计模式口诀速记
  • n > m 将输出文件 m 和 n 合并。 n < m 将输入文件 m 和 n 合并。 有什么区别
  • 语言障碍在自闭症儿童中的表现及应对
  • (成功解决)ubuntu22.04不小心更新成了atzlinux12.7.1,右上角出现红色错误符号
  • 005 C#语言基本元素概览,初识类型,变量与方法
  • Spring Cloud --- Sentinel 授权规则
  • 计算机网络基础 - 传输层(1)
  • Chrome DevTools:Console Performance 汇总篇
  • 【Spark | Spark-Core篇】RDD行动算子action
  • 23.Redis核心数据结构
  • 免费送源码:Node.JS+Express+MySQL Express 流浪动物救助系统 计算机毕业设计原创定制
  • 基于Java+Springboot+Vue开发的旅游景区管理系统
  • Python 实现的风控系统(使用了kafka、Faust、模拟drools、redis、分布式数据库)
  • Linux运维_Rocky8 安装配置Zabbix
  • jQuery Mobile 滚屏事件
  • 3.1.1ReactOS系统中搜索给定长度的空间地址区间函数的实现
  • arm64系统不支持32位的解决armel armhf
  • 【毕业设计】工具大礼包之『Maven3.6.3安装与配置』
  • gin入门教程(9):路由分组与路由版本控制
  • rt-thread移植SystemView中遇到的问题
  • 【C++STL】list的模拟实现
  • 以30个面试问题和案例为导向:全面解析 Java Servlet是什么?基本概念、实现原理、生命周期、类结构、请求与响应的处理机制,以及性能优化和安全性管理
  • MFC小游戏设计
  • [漏洞挖掘与防护] 04.Windows系统安全缺陷之5次Shift漏洞启动计算机机理分析
  • ​手机极简待办app哪款好用?
  • SpringBoot高级-底层原理
  • LabVIEW提高开发效率技巧----插入式架构
  • MySQL COUNT(*)、COUNT(1)、COUNT(id)、COUNT(字段)效果及性能
  • webpack4 - 动态导入文件 dynamic-import 报错的解决方法
  • 【NodeJS】NodeJS+mongoDB在线版开发简单RestfulAPI (四):状态码的使用