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

判断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+$"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深蓝海拓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值