|
发表于 2023-8-25 14:21:52
|
显示全部楼层
问题的原因是在 validate_code 方法中,当输入不符合要求时,直接将文本设置为之前的文本去掉最后一个字符,这样会导致输入的字符无法显示在文本框中。
为了实现边输入边校验的功能,可以使用 QRegExpValidator 来对输入进行校验。以下是修改后的代码:
- from PyQt5.QtCore import QRegExp
- from PyQt5.QtGui import QRegExpValidator
- class MyWidget(QWidget):
- def __init__(self):
- super().__init__()
- self.ui = Ui_Form()
- self.ui.setupUi(self)
-
- # 创建正则表达式,限制输入为1-17位数字,第18位可以是数字或字母
- regex = QRegExp('^[0-9A-Za-z]{0,17}$')
-
- # 创建校验器,并设置正则表达式
- validator = QRegExpValidator(regex)
-
- # 将校验器应用到文本框中
- self.ui.code.setValidator(validator)
复制代码
在修改后的代码中,我们使用了 QRegExp 来创建了一个正则表达式,限制输入为1-17位数字,第18位可以是数字或字母。然后,我们创建了一个 QRegExpValidator 校验器,并将正则表达式应用到文本框中。
这样,当用户输入不符合要求的字符时,文本框将不会接受这些字符,并且不会影响之前输入的内容。 |
|