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())

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-12 18:38:01       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-12 18:38:01       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-12 18:38:01       57 阅读
  4. Python语言-面向对象

    2024-07-12 18:38:01       68 阅读

热门阅读

  1. Linux下如何解压rar文件

    2024-07-12 18:38:01       24 阅读
  2. C# 建造者模式(Builder Pattern)

    2024-07-12 18:38:01       22 阅读
  3. Warning: could not connect to a running Ollama instance

    2024-07-12 18:38:01       17 阅读
  4. 大语言模型

    2024-07-12 18:38:01       19 阅读
  5. EasyExcel文档链接与使用示例

    2024-07-12 18:38:01       16 阅读
  6. html转markdown nodejs实现

    2024-07-12 18:38:01       18 阅读
  7. 记一次nodeBB部署

    2024-07-12 18:38:01       23 阅读
  8. 使用Spring Boot实现分布式配置管理

    2024-07-12 18:38:01       16 阅读
  9. 快速上手文心一言:让创作更轻松

    2024-07-12 18:38:01       18 阅读
  10. 树状数组(Binary Indexed Tree, BIT)

    2024-07-12 18:38:01       19 阅读