当前位置: 首页 > 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简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

Go语言多线程问题

打印零与奇偶数&#xff08;leetcode 1116&#xff09; 方法1&#xff1a;使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...

MySQL 8.0 事务全面讲解

以下是一个结合两次回答的 MySQL 8.0 事务全面讲解&#xff0c;涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容&#xff0c;并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念&#xff08;ACID&#xff09; 事务是…...

Chrome 浏览器前端与客户端双向通信实战

Chrome 前端&#xff08;即页面 JS / Web UI&#xff09;与客户端&#xff08;C 后端&#xff09;的交互机制&#xff0c;是 Chromium 架构中非常核心的一环。下面我将按常见场景&#xff0c;从通道、流程、技术栈几个角度做一套完整的分析&#xff0c;特别适合你这种在分析和改…...

通过MicroSip配置自己的freeswitch服务器进行调试记录

之前用docker安装的freeswitch的&#xff0c;启动是正常的&#xff0c; 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...

StarRocks 全面向量化执行引擎深度解析

StarRocks 全面向量化执行引擎深度解析 StarRocks 的向量化执行引擎是其高性能的核心设计&#xff0c;相比传统行式处理引擎&#xff08;如MySQL&#xff09;&#xff0c;性能可提升 5-10倍。以下是分层拆解&#xff1a; 1. 向量化 vs 传统行式处理 维度行式处理向量化处理数…...