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

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

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

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

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

import sys
import re
from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QLineEdit, QLabelclass 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, QLabelclass 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, QLabelclass 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 sysfrom PySide6.QtCore import QRegularExpression
from PySide6.QtGui import QRegularExpressionValidator
from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QLineEditclass 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+$"

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 本人学习保存-macOS打开Navicat提示「“Navicat Premium”已损坏,无法打开。 你应该将它移到废纸篓。」的解决方法
  • neo4j 图数据库:Cypher 查询语言、医学知识图谱
  • 【C++】优先级队列(底层代码解释)
  • SpringApplication.java类
  • 【linux高级IO(二)】多路转接之select详解
  • 离线语音识别芯片在智能生活中的应用
  • liunx作业笔记1
  • Elasticsearch7.5.2 常用rest api与elasticsearch库
  • 昇思25天学习打卡营第9天|MindSpore静态图加速
  • 【MySQL基础篇】事务
  • RabbitMq,通过prefetchCount限制消费并发数
  • 排序之冒泡排序
  • 掌握构建魔法:Gradle中Groovy插件的配置秘籍
  • 深度解析 PostgreSQL Protocol v3.0(三)— 流复制(上)
  • i7-13700K负载过高时出现无故自动重启(蓝屏问题)
  • Laravel核心解读--Facades
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • MobX
  • Nacos系列:Nacos的Java SDK使用
  • Next.js之基础概念(二)
  • react-native 安卓真机环境搭建
  • spring + angular 实现导出excel
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • win10下安装mysql5.7
  • windows下使用nginx调试简介
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 分类模型——Logistics Regression
  • 基于webpack 的 vue 多页架构
  • 聊聊flink的TableFactory
  • 面试遇到的一些题
  • 如何实现 font-size 的响应式
  • 我有几个粽子,和一个故事
  • 用element的upload组件实现多图片上传和压缩
  • 最近的计划
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • 从如何停掉 Promise 链说起
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • #HarmonyOS:基础语法
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (回溯) LeetCode 78. 子集
  • (算法)大数的进制转换
  • (一)Kafka 安全之使用 SASL 进行身份验证 —— JAAS 配置、SASL 配置
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • .chm格式文件如何阅读
  • .gitignore文件设置了忽略但不生效
  • .net MVC中使用angularJs刷新页面数据列表
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .NET程序员迈向卓越的必由之路
  • .NET未来路在何方?