当前位置: 首页 > 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/ │ │ └─…...

突破语言边界:XUnity.AutoTranslator全场景应用指南

突破语言边界&#xff1a;XUnity.AutoTranslator全场景应用指南 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 当你打开一款期待已久的外文游戏&#xff0c;却被满屏陌生文字阻挡了探索的脚步&#xff1…...

OpenClaw环境迁移:GLM-4.7-Flash配置的备份与恢复方案

OpenClaw环境迁移&#xff1a;GLM-4.7-Flash配置的备份与恢复方案 1. 为什么需要环境迁移&#xff1f; 上周我的主力开发机突然硬盘故障&#xff0c;导致所有OpenClaw配置丢失。最痛心的是花了两周调试的GLM-4.7-Flash对接设置全部归零——包括精心调整的温度参数、自定义提示…...

3分钟掌握Umi-OCR插件:打造你的专属文字识别工具箱

3分钟掌握Umi-OCR插件&#xff1a;打造你的专属文字识别工具箱 【免费下载链接】Umi-OCR_plugins Umi-OCR 插件库 项目地址: https://gitcode.com/gh_mirrors/um/Umi-OCR_plugins 还在为不同场景下的文字识别需求而烦恼吗&#xff1f;Umi-OCR插件库为你提供了完美的解决…...

轻量级语义通信系统在边缘计算中的实践与优化

1. 边缘计算为什么需要轻量级语义通信&#xff1f; 想象一下你家的智能门铃摄像头&#xff0c;它需要实时把门口的画面传到你的手机上。传统的通信方式就像把整本相册邮寄给你&#xff0c;而语义通信则是只告诉你"门口有个穿红衣服的快递员"。这种"说重点"…...

使用现代 Java 技术栈构建企业级 AI 应用

使用现代 Java 技术栈构建企业级 AI 应用 引言 随着人工智能技术的快速发展&#xff0c;企业级 AI 应用的需求也迅速增长。Java 作为一门成熟的企业级编程语言&#xff0c;其生态系统在 AI 应用开发中扮演着重要角色。本文将探讨如何利用 Java 技术栈构建生产级 AI 应用&#x…...

导师推荐!盘点2026年顶流之选的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年AI论文写作工具全面升级&#xff0c;实测提速超300%&#xff0c;覆盖选题构思、文献综述、数据整理、格式排版等核心场景&#xff0c;高效搞定论文不再是梦想。 一、全流程王者&#xff1a;一站式搞定论文全链路&#xff08;一…...

51单片机定时器初值计算与Proteus仿真

51单片机定时器初值计算方法详解1. 定时器基础原理1.1 单片机定时器工作模式51系列单片机内置的定时器/计数器模块是嵌入式系统中实现精确时间控制的核心部件。定时器本质上是一个特殊功能的寄存器&#xff0c;通过累加时钟脉冲实现计时功能。根据位数不同&#xff0c;51单片机…...

League-Toolkit:提升英雄联盟竞技效率的智能辅助工具集

League-Toolkit&#xff1a;提升英雄联盟竞技效率的智能辅助工具集 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League-Toolki…...

springboot网络小说在线阅读网站的设计与实现

目录需求分析技术选型数据库设计核心功能实现性能优化安全防护测试部署项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作需求分析 明确网站的核心功能和用户需求。网络小说在线阅读网站通常需要包含以下功能模块&#xff1a;用户…...

MusePublic大模型Qt图形界面开发指南

MusePublic大模型Qt图形界面开发指南 1. 为什么需要图形界面&#xff1f; 如果你已经能用代码调用MusePublic大模型&#xff0c;可能会发现一个问题&#xff1a;每次都要打开终端、输入命令、等待结果&#xff0c;这样的交互方式既不方便也不直观。特别是当你需要频繁调整参数…...