当前位置: 首页 > 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()

相关文章:

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

基于QLineEdit实现自定义文本框,用于格式化文本,每四个字符后添加一个空格 基于QLineEdit实现自定义文本框,用于格式化文本,每四个字符后添加一个空格前言1、实现要点1.1 继承和初始化1.2 定义textChanged的槽函数1.3 格式化逻辑1…...

23种设计模式口诀速记

设计模式的核心在于提供了相关问题的解决方案,使得人们可以更加简单方便的复用成功的设计和体系结构 23种设计模式,此处不举例,可以去看我上传的资源里面由详细汇总 口诀: 创建:想见员工丹 [抽象工厂、建造者(生成者…...

n > m 将输出文件 m 和 n 合并。 n < m 将输入文件 m 和 n 合并。 有什么区别

在你的描述中&#xff0c;似乎有一点误解。n >& m 和 n <& m 并不是用来合并文件的&#xff0c;而是用于重定向文件描述符&#xff08;file descriptors&#xff09;。让我澄清一下这两个命令的确切含义以及它们之间的区别。 n >& m —— 输出重定向 含…...

语言障碍在自闭症儿童中的表现及应对

自闭症儿童常常面临着语言障碍的困扰&#xff0c;这给他们的成长和发展带来了巨大挑战。 语言障碍在自闭症儿童中的表现形式多样。比如&#xff0c;有个叫小明的自闭症儿童&#xff0c;已经五岁了却还只会说一些简单的词语&#xff0c;如 “爸爸”“妈妈”“要” 等&#xff0c…...

(成功解决)ubuntu22.04不小心更新成了atzlinux12.7.1,右上角出现红色错误符号

文章目录 &#x1f315;问题&#x1f315;查看系统版本&#x1f315;为什么更新更成了atzlinux&#x1f315;通过修复依赖关系尝试解决右上角红色错误符号&#x1f315;把源换成ubuntu的源&#x1f315;删除atzlinux源和自定义的第三方源&#x1f315;重新创建/etc/os-release文…...

005 C#语言基本元素概览,初识类型,变量与方法

构成C#语言的基本元素 标记 &#xff1a;C#编译器可以识别的文本 关键字(Keyword)操作符(Operator)标识符(Identifier)标点符号文本注释和空白 简要介绍数据据类型、变量与方法 变量是存放数据的地方&#xff0c;简称数据 方法是处理数据的逻辑&#xff0c;简称算法 程序…...

Spring Cloud --- Sentinel 授权规则

授权规则概述 在某些场景下&#xff0c;需要根据调用接口的来源判断是否允许执行本次请求。此时就可以使用 Sentinel 提供的授权规则来实现&#xff0c;Sentinel 的授权规则能够根据请求的来源判断是否允许本次请求通过。 在 Sentinel 的授权规则中&#xff0c;提供了 白名单…...

计算机网络基础 - 传输层(1)

计算机网络基础 传输层概述多路复用与解复用概述解复用的工作原理无连接多路解复用面向连接的多路复用 无连接运输&#xff1a;UDP概述UDP 主要应用UDP 报文段结构 可靠数据传输的原理概述构建可靠数据传输协议经完全可靠信道的可靠数据传输&#xff1a;rdt1.0经具有比特差错信…...

Chrome DevTools:Console Performance 汇总篇

Chrome DevTools Chrome 开发者工具是一套 Web 开发者工具&#xff0c;直接内置于 Google Chrome 浏览器中。 开发者工具可以帮助您即时修改页面和快速诊断问题&#xff0c;最终帮助您更快地构建更好的网站。 一、开启 DevTools 右上角菜单 > 更多工具 > 开发者工具 页面…...

【Spark | Spark-Core篇】RDD行动算子action

使用转换算子是产生一个新的rdd&#xff0c;此时在driver端会生成一个逻辑上的执行计划&#xff0c;但任务还没有执行。但所谓的行动算子&#xff0c;其实就是触发作业执行的方法&#xff08;runJob&#xff09;。底层代码调用的是环境对象的runJob方法。 1. reduce 函数源码&…...

23.Redis核心数据结构

一、String(k-v) 字符串常规操作 备注 应用场景 SET key value 存入字符转键值对 单值缓存、对象缓存 MSET [key value, key value] 批量存储字符串键值对 对象缓存 SETNX key value 存入一个不存在的键值对 分布式锁 GET KEY 获取一个字符串键值 MGET [key,key,…...

免费送源码:Node.JS+Express+MySQL Express 流浪动物救助系统 计算机毕业设计原创定制

摘 要 随着互联网大趋势的到来&#xff0c;社会的方方面面&#xff0c;各行各业都在考虑利用互联网作为媒介将自己的信息更及时有效地推广出去&#xff0c;而其中最好的方式就是建立网络管理系统&#xff0c;并对其进行信息管理。由于现在网络的发达&#xff0c;流浪动物救助系…...

基于Java+Springboot+Vue开发的旅游景区管理系统

项目简介 该项目是基于JavaSpringbootVue开发的旅游景区管理系统&#xff08;前后端分离&#xff09;&#xff0c;这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能&#xff0c;同时锻炼他们的项目设计与开发能力。通过学习基于Java的旅…...

Python 实现的风控系统(使用了kafka、Faust、模拟drools、redis、分布式数据库)

以下是一个使用 Python 实现的风控系统示例&#xff0c;涵盖以下技术组件&#xff1a; Kafka 消息中间件&#xff1a;用于实时接收支付业务系统传递的交易数据。Faust&#xff08;Kafka Streams 的 Python 等价&#xff09;&#xff1a;用于流式处理 Kafka 中的消息。规则引擎…...

Linux运维_Rocky8 安装配置Zabbix

Zabbix 是一个开源的监控解决方案&#xff0c;用于监控网络、服务器、应用程序和服务的性能。它提供实时监控、数据收集、告警通知以及图形化界面&#xff0c;方便用户查看和分析监控数据。Zabbix 支持多种数据收集方式&#xff0c;包括 SNMP、IPMI、JMX 和自定义脚本&#xff…...

jQuery Mobile 滚屏事件

jQuery Mobile 滚屏事件 在移动开发中,滚屏事件是一个非常重要的交互方式,它可以让用户通过滚动屏幕来浏览内容。jQuery Mobile 是一个流行的移动框架,它提供了一套丰富的组件和事件,使得在移动设备上实现滚屏效果变得简单。本文将详细介绍 jQuery Mobile 中的滚屏事件,包…...

3.1.1ReactOS系统中搜索给定长度的空间地址区间函数的实现

系列文章目录 //搜索给定长度的空间地址区间 MmFindGap&#xff08;&#xff09;&#xff1b; PMADDRESS_SPACE AddressSpace,//该进程用户空间 ULONG_PTR Length,//寻找的空间间隔大小 ULONG_PTR Granularity,//粒度位&#xff0c;表明空间起点的对齐要求&#xff0c;注意是起…...

arm64系统不支持32位的解决armel armhf

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码指引&#xff1a;github源…...

【毕业设计】工具大礼包之『Maven3.6.3安装与配置』

系统版本 电脑系统&#xff1a;Windows 10 一.Maven下载 &#x1f3af; 统一版本 apache-maven-3.6.3&#xff0c;下面两种下载方式2选1即可 1.官网直下 官网下载地址 https://archive.apache.org/dist/maven/maven-3/3.6.3/binaries/ 找到apache-maven-3.6.3-bin.zip 云盘…...

gin入门教程(9):路由分组与路由版本控制

在使用 Gin 框架构建 RESTful API 时,路由分组与版本控制是一种常见的实践,可以帮助你更好地管理不同版本的 API。下面是如何在 Gin 中实现路由分组和版本控制的示例。 目录结构 /hello-gin │ ├── cmd/ │ └── main.go ├── api/ │ ├── v1/ │ │ └─…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

C++ 设计模式 《小明的奶茶加料风波》

&#x1f468;‍&#x1f393; 模式名称&#xff1a;装饰器模式&#xff08;Decorator Pattern&#xff09; &#x1f466; 小明最近上线了校园奶茶配送功能&#xff0c;业务火爆&#xff0c;大家都在加料&#xff1a; 有的同学要加波霸 &#x1f7e4;&#xff0c;有的要加椰果…...

消防一体化安全管控平台:构建消防“一张图”和APP统一管理

在城市的某个角落&#xff0c;一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延&#xff0c;滚滚浓烟弥漫开来&#xff0c;周围群众的生命财产安全受到严重威胁。就在这千钧一发之际&#xff0c;消防救援队伍迅速行动&#xff0c;而豪越科技消防一体化安全管控平台构建的消防“…...

从物理机到云原生:全面解析计算虚拟化技术的演进与应用

前言&#xff1a;我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM&#xff08;Java Virtual Machine&#xff09;让"一次编写&#xff0c;到处运行"成为可能。这个软件层面的虚拟化让我着迷&#xff0c;但直到后来接触VMware和Doc…...

Spring AOP代理对象生成原理

代理对象生成的关键类是【AnnotationAwareAspectJAutoProxyCreator】&#xff0c;这个类继承了【BeanPostProcessor】是一个后置处理器 在bean对象生命周期中初始化时执行【org.springframework.beans.factory.config.BeanPostProcessor#postProcessAfterInitialization】方法时…...

2025年- H71-Lc179--39.组合总和(回溯,组合)--Java版

1.题目描述 2.思路 当前的元素可以重复使用。 &#xff08;1&#xff09;确定回溯算法函数的参数和返回值&#xff08;一般是void类型&#xff09; &#xff08;2&#xff09;因为是用递归实现的&#xff0c;所以我们要确定终止条件 &#xff08;3&#xff09;单层搜索逻辑 二…...

UE5 音效系统

一.音效管理 音乐一般都是WAV,创建一个背景音乐类SoudClass,一个音效类SoundClass。所有的音乐都分为这两个类。再创建一个总音乐类&#xff0c;将上述两个作为它的子类。 接着我们创建一个音乐混合类SoundMix&#xff0c;将上述三个类翻入其中&#xff0c;通过它管理每个音乐…...

[QMT量化交易小白入门]-六十二、ETF轮动中简单的评分算法如何获取历史年化收益32.7%

本专栏主要是介绍QMT的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写100篇左右。 QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步。 文章目录 相关阅读1. 策略概述2. 趋势评分模块3 代码解析4 木头…...