自学内容网 自学内容网

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


原文地址:https://blog.csdn.net/xulibo5828/article/details/140374878

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!