PySide(PyQt)判断QLineEdit的输入是否合规

news2024/9/25 13:22:22

判断QLineEdit的输入是否符合要求,比如是否为整数或者浮点数。 

1、使用正则表达式来判断

符合正则表达式则输入合规

import sys
import re
from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QLineEdit, QLabel


class ExampleWidget(QWidget):
    def __init__(self):
        super().__init__()
        layout = QVBoxLayout(self)

        self.line_edit = QLineEdit()
        self.label = QLabel()

        layout.addWidget(self.line_edit)
        layout.addWidget(self.label)

        # 连接文本变化的信号与槽函数
        self.line_edit.textChanged.connect(self.validate_text)

    def validate_text(self, text):
        # 使用正则表达式判断输入是否有效
        if re.match("^-?\d*\.?\d+$", text):
            self.label.setText("输入有效")
        else:
            self.label.setText("输入无效")


if __name__ == '__main__':
    app = QApplication(sys.argv)
    widget = ExampleWidget()
    widget.show()
    sys.exit(app.exec())

运行截图: 

        

 2、使用尝试类型转换的方法

能够成功转换输入就合规,否则不合规

import sys
import re
from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QLineEdit, QLabel


class ExampleWidget(QWidget):
    def __init__(self):
        super().__init__()
        layout = QVBoxLayout(self)

        self.line_edit = QLineEdit()
        self.label = QLabel()

        layout.addWidget(self.line_edit)
        layout.addWidget(self.label)

        # 连接文本变化的信号与槽函数
        self.line_edit.textChanged.connect(self.validate_text)

    def validate_text(self, text):
        # 使用尝试类型转换的方法判断输入是否有效
        if text:            
            try:
                # 尝试将输入内容转换为浮点数
                float(text)
                self.label.setText("输入有效")
            except ValueError:
                # 如果转换失败,说明输入内容不是浮点数
                self.label.setText("输入无效")
        else:
            self.label.setText("请输入整数和浮点数")



if __name__ == '__main__':
    app = QApplication(sys.argv)
    widget = ExampleWidget()
    widget.show()
    sys.exit(app.exec())

        

3、进一步地,结合样式表,实现输入错误时显示变色 

import sys
from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QLineEdit, QLabel


class ExampleWidget(QWidget):
    def __init__(self):
        super().__init__()
        layout = QVBoxLayout(self)

        self.line_edit = QLineEdit()
        self.line_edit.setStyleSheet('QLineEdit[error="true"] {color: rgb(255, 0, 0);}')
        self.label = QLabel()

        layout.addWidget(self.line_edit)
        layout.addWidget(self.label)

        # 连接文本变化的信号与槽函数
        self.line_edit.textChanged.connect(self.validate_text)

    def validate_text(self, text):
        # 使用尝试类型转换的方法判断输入是否有效
        if text:
            try:
                # 尝试将输入内容转换为浮点数
                float(text)
                if self.line_edit.property('error'):
                    self.line_edit.setProperty('error', False)      # 清除错误标志
                    self.line_edit.setStyleSheet(self.line_edit.styleSheet())  # 刷新显示

                self.label.setText("输入有效")
            except ValueError:
                # 如果转换失败,说明输入内容不是浮点数
                self.label.setText("输入无效")
                self.line_edit.setProperty('error', True)    # 设置错误标志
                self.line_edit.setStyleSheet(self.line_edit.styleSheet())  # 刷新显示
        else:
            self.label.setText("请输入整数和浮点数")


if __name__ == '__main__':
    app = QApplication(sys.argv)
    widget = ExampleWidget()
    widget.show()
    sys.exit(app.exec())
    

 运行截图:

 这里对QLineEdit自定义了一个特性:'error',并且根据这个特性对应了样式表,当输入不合规时,error=True,QLineEdit按照样式表刷新显示

 4、使用另一种正则表达式的方法,直接限制输入

参考自:让PySide6中QlineEdit只输入数字或者字母_pyside6 edit 只能输入数字-CSDN博客

import sys

from PySide6.QtCore import QRegularExpression
from PySide6.QtGui import QRegularExpressionValidator
from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QLineEdit


class ExampleWidget(QWidget):
    def __init__(self):
        super().__init__()
        layout = QVBoxLayout(self)

        self.line_edit = QLineEdit()
        reg = QRegularExpression("^-?\d+\.?\d+$")
        validator = QRegularExpressionValidator(self)
        validator.setRegularExpression(reg)
        self.line_edit.setValidator(validator)
        layout.addWidget(self.line_edit)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    widget = ExampleWidget()
    widget.show()
    sys.exit(app.exec())

正则表达式"^-?\d+\.?\d+$"的含义是:

  1. ^ 表示匹配字符串的开始位置。
  2. -? 表示匹配一个可选的负号(-)。
  3. \d+ 表示匹配一个或多个数字字符(0-9)。
  4. \.? 表示匹配一个可选的小数点(.)。在正则表达式中,. 是一个特殊字符,需要用 \ 进行转义,因此写作 \.
  5. \d+ 表示匹配一个或多个数字字符。
  6. $ 表示匹配字符串的结束位置。

如果希望输入非负数,则将正则表达式修改为: "^\d+\.?\d+$"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1924045.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Eclipse 运行程序

我们可以在 Package Explorer 视图 可以在 Package Explorer 视图中快速运行 Java 程序。 Package Explorer 视图: 鼠标右击包含 main 函数的 java 类选择 Run As > Java Application 同样你也可以在 Package Explorer 视图中选择包含 main 方法的类并按下快捷键&#x…

C++之多态使用小结

1、多态定义 1.1 多态概念 C多态性(Polymorphism)是面向对象编程(OOP)的一个重要特性之一,它允许我们使用统一的接口来处理不同类型的对象。多态性使得程序更加灵活、可扩展并且易于维护。 通俗来说,就是多种形态&#xff0…

期末成绩发布智能助手

期末考试的结束标志着教师们迎来了成绩处理的忙碌时期。传统的成绩单分发方式不仅耗时耗力,而且容易出错。幸运的是,易查分小程序的出现,为这一过程提供了一个简便而高效的解决方案。 易查分小程序是专为教师和家长设计的智能工具&#xff0…

安卓笔记1-Retrofit2请求自定义接口

1、整体功能概述 安卓项目中使用Retrofit2实现和自定义接口的网络交互,通过Postman模拟服务端,创建自定义接口。 作用 前后端开发进度对不齐时,客户端可利用本功能模拟测试数据。备忘。 缺点 retrofit模拟接口需要配置响应数据类&#xff…

美无定论,娜扎亦菲各自绽放你更爱哪一款?

娜扎亦菲各自绽放你更爱哪一款? 哎呀,这个问题可真是让我头疼呢, 就像让我在两个糖果店里选择最甜的那一颗一样难! 古力娜扎和刘亦菲,两位都是娱乐圈里璀璨的明珠, 美得各有千秋,让人怎么舍得…

2024年上半年信息系统项目管理师——综合知识真题题目及答案(第1批次)(3)

2024年上半年信息系统项目管理师 ——综合知识真题题目及答案(第1批次)(3) 第41题:在应用集成中,有多个组件帮助协调连接各种应用。其中()利用特定的数据结构,帮助开发人…

企业网络实验dhcp-snooping、ip source check,防非法dhcp服务器、自动获取ip(虚拟机充当DHCP服务器)、禁手动修改IP

文章目录 需求相关配置互通性配置配置vmware虚拟机(dhcp)分配IP服务配置dhcp relay(dhcp中继)配置dhcp-snooping(防非法dhcp服务器)配置ip source check(禁手动修改IP) DHCP中继&…

四. TensorRT模型部署优化-pruning(sparse-tensor-core)

目录 前言0. 简述1. 自动驾驶中需要关注的电力消耗2. Ampere架构中的3rd Generation Tensor core3. Sparse tensor core做矩阵乘法总结参考 前言 自动驾驶之心推出的 《CUDA与TensorRT部署实战课程》,链接。记录下个人学习笔记,仅供自己参考 本次课程我们…

【刷题汇总 -- 删除公共字符、两个链表的第一个公共结点、mari和shiny】

C日常刷题积累 今日刷题汇总 - day0121、删除公共字符1.1、题目1.2、思路1.3、程序实现 -- 蛮力法1.4、程序实现 -- 哈希 2、两个链表的第一个公共结点2.1、题目2.2、思路2.3、程序实现 -- 对齐比对法2.4、程序实现 -- 公共端点路程法 3、mari和shiny3.1、题目3.2、思路3.3、程…

Unity如何查找两个transform最近的公共parent

查找两个子对象最近的父对象 一、问题背景二、解决方案思路核心算法代码 三、总结 一、问题背景 最近看到个关于Unity的问题:在Hierarchy面板中的游戏对象,给定两个子物体transform对象,如何查找这两个transform最近的公共父级parent。感觉挺…

Java中常用线程安全的集合

文章目录 常用线程安全的集合CopyWriteArrayListCopyOnWriteArraySetHashTableConcurrentHashMapJDK1.7JDK1.8 常用线程安全的集合 在多线程环境中,数据的一致性和线程的安全性是至关重要的。传统的集合类,如ArrayList、HashMap和HashSet,在…

手撕Vue中的RouterLink和RouterView,深入理解其底层原理(一)

RouterLink和RouterView的作用 我们可以通过RouterLink绑定好指向的路径 点击就能够实现在RouterView中将页面显示出来 我们首先使用官方的vue-router展示一下效果 App.vue <template><div><router-link to"/">Home</router-link><ro…

Real User ID 和 Effective User ID 的区别

在 Unix 和 Linux 系统中&#xff0c;每个进程都有多个用户标识符&#xff08;UID&#xff09;&#xff0c;其中最重要的是“真实用户 ID”&#xff08;real UID&#xff09;和“有效用户 ID”&#xff08;effective UID&#xff09;。 它们的区别和用途如下&#xff1a; 真实…

STM32入门开发操作记录(一)——新建工程

目录 一、课程准备1. 课程资料2. 配件清单3. 根目录 二、环境搭建三、新建工程1. 载入器件支持包2. 添加模块3. ST配置4. 外观设置5. 主函数文件 一、课程准备 1. 课程资料 本记录操作流程参考自b站视频BV1th411z7snSTM32入门教程-2023版 细致讲解 中文字幕&#xff0c;课程资…

五. TensorRT API的基本使用-MNIST-model-build-infer

目录 前言0. 简述1. 案例运行2. 代码分析2.1 main函数2.2 build接口2.3 infer接口2.4 其他 总结参考 前言 自动驾驶之心推出的 《CUDA与TensorRT部署实战课程》&#xff0c;链接。记录下个人学习笔记&#xff0c;仅供自己参考 本次课程我们来学习课程第五章—TensorRT API 的基…

7.13实训日志

上午 学习网络安全的过程中&#xff0c;我们深入了解了网络的不同层面和技术&#xff0c;从表层网络到深网再到暗网&#xff0c;以及涉及的产业分类和技术工具。这些知识不仅帮助我们理解网络的复杂性&#xff0c;还揭示了如何应对和防范各种网络威胁。 首先&#xff0c;我们…

滞后序列分析案例详解

一个半小时 超出30分钟 日期&#xff1a;2024-07-13 19:14:33 回放 摘要 Python在行为分析中的应用 主要讲述了如何使用Python处理序列数据&#xff0c;以及如何结合定性分析和定量分析来全面分析课程内容。讲者提到了一种叫做分层法的分类方法&#xff0c;该方法使用了布鲁…

记录vite项目中Cornerstone的兼容问题(持续更新)

&#x1f50e; 在vite项目中打包提示错误 ESM integration proposal for Wasm" is not supported currently. ⛳️ 问题描述 Error: Could not load /home/xxx/xxx/node_modules/icr/polyseg-wasm/dist/ICRPolySeg.wasm (imported by node_modules/icr/polyseg-wasm/di…

【软件建模与设计】-02-UML图

目录 摘要 1、用例图&#xff08;use case diagram&#xff09; 2、类与对象 3、类图 3.1、四种关系 3.2、可见性 4、交互图 4.1、通信图 4.2、顺序图 5、状态机图 6、包图 7、并发通信图 8、部署图 9、UML扩展机制 9.1、构造型 9.2、标记值 9.3、约束 摘要 用…

log4j2的日志框架(详细,springboot和异步日志的实现)

目录 log4j2的介绍 Log4j2的性能 SpringBoot中的使用Log4j2 log4j2的进阶--异步日志 AsyncAppender方式 AsyncLogger方式 log4j2的介绍 Apache Log4j 2是对Log4j的升级版&#xff0c;参考了logback的一些优秀的设计&#xff0c;并且修复了一些问题&#xff0c;因此带 来…