赞
踩
Qvalidator 校验器用于检验用户输入的数据的合法性。如果一个输入框设置了校验器,到时用户在文本框中输入内容时,首先会将内容传递给验证器进行验证,如果输入框结束输入后,上述的验证状态并非有效,则不允许输入。
编辑框或者其他输入控件 可以通过类似于SetValidator来指定验证器。
QValidator 是一个抽象类,有一些子类:
from PyQt5.QtWidgets import * from PyQt5.QtGui import QIntValidator, QDoubleValidator, QRegExpValidator from PyQt5.QtCore import QRegExp import sys class QLineEditorValidator(QWidget): def __init__(self): super().__init__() self.init_ui() def init_ui(self): self.setWindowTitle("校验器") form_layout = QFormLayout() int_line = QLineEdit() double_line = QLineEdit() re_line = QLineEdit() int_line.setPlaceholderText("整形数据") double_line.setPlaceholderText("浮点数据") re_line.setPlaceholderText("正则数据") form_layout.addRow("整形数据", int_line) form_layout.addRow("浮点数据", double_line) form_layout.addRow("正则数据", re_line) int_validator = QIntValidator() int_validator.setRange(1, 10) double_validator = QDoubleValidator() double_validator.setRange(-360, 360) double_validator.setDecimals(2) re_validator = QRegExpValidator() reg = QRegExp("^[a-zA-Z0-9]+$") re_validator.setRegExp(reg) int_line.setValidator(int_validator) double_line.setValidator(double_validator) re_line.setValidator(re_validator) if __name__ == "__main__": app = QApplication(sys.argv) win = QLineEditorValidator() win.show() sys.exit(app.exec_())
def validate(self, input_str, input_int):
# input_str是输入的内容
# input_int是光标的位置
....
from PyQt5.Qt import * import sys class Window(QWidget): def __init__(self): super().__init__() self.setWindowTitle("验证器的使用") self.resize(500, 500) self.setup_ui() def setup_ui(self): le = QLineEdit() le.move(100, 100) # 18-180 # QValidator不能直接用,而是用一个子类来继承,然后实体化 # 因此上面写了一个新的AgeValidator继承于QValidator validator1 = ScoreValidator() le.setValidator(validator1) le2 = QLineEdit() le2.move(200, 200) fm_layout = QFormLayout(self) fm_layout.addRow("输入年龄", le) fm_layout.addRow("打酱油行", le2) class ScoreValidator(QValidator): def validate(self, input_str, input_int): # input_str: 输入框中的已有内容 # input_int: 光标的位置 print(f"当前数值是:{input_str}, 是第{input_int}个字符") try: if 60 <= int(input_str) <= 100: # 需要有一个返回值 return QValidator.Acceptable, input_str, input_int # 返回验证通过 elif 5 <= int(input_str) < 60: return QValidator.Intermediate, input_str, input_int # 返回验证中间状态,不做响应 else: return QValidator.Invalid, input_str, input_int # 返回验证不通过 except: if len(input_str) == 0: return QValidator.Intermediate, input_str, input_int # 返回验证中间状态,不做响应 return QValidator.Invalid, input_str, input_int # 返回验证不通过 # 方便在模板里进行调试 if __name__ == "__main__": app = QApplication(sys.argv) window = Window() window.show() sys.exit(app.exec_())
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。