判断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+$"的含义是:
^
表示匹配字符串的开始位置。-?
表示匹配一个可选的负号(-
)。\d+
表示匹配一个或多个数字字符(0-9)。\.?
表示匹配一个可选的小数点(.
)。在正则表达式中,.
是一个特殊字符,需要用\
进行转义,因此写作\.
。\d+
表示匹配一个或多个数字字符。$
表示匹配字符串的结束位置。
如果希望输入非负数,则将正则表达式修改为: "^\d+\.?\d+$"