欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > PySide(PyQt)判断QLineEdit的输入是否合规

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

2024/10/24 9:28:25 来源:https://blog.csdn.net/xulibo5828/article/details/140374878  浏览:    关键词: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+$"

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com