为什么QRegExpValidator总是返回2



我的QRegExpValidator总是认为我的输入是Acceptable——它不应该是。在gui.py中有一个名为`的QLineEdit对象

from gui import Ui_Dialog
from PyQt5.QtWidgets import QDialog, QApplication
from PyQt5 import QtCore
from PyQt5.QtGui import QRegExpValidator
from PyQt5.QtCore import QRegExp
import sys

class AppWindow(QDialog):   
def __init__(self):
super().__init__()
self.ui = Ui_Dialog()
self.ui.setupUi(self)
self.show()
self.ui.number.textChanged[str].connect(self.validate_number)
def validate_number(self):
regex = QRegExp("^[0-9]{3}$")
tmp = QRegExpValidator(regex, self.ui.number)
print(tmp.Acceptable)

if __name__ == "__main__":
app = QApplication(sys.argv)
w = AppWindow()
w.show()
sys.exit(app.exec_())

无论我尝试什么,输出总是2。我希望我输入任何内容,如果它是一个3位数的数字,函数将返回True(或Acceptable(。我试着沿着这里解释的这条路走,我错过了什么?

OP似乎不了解QValidator是如何与QLineEdit一起工作的。

逻辑是使用已经建立连接的方法setValidator将QValidator设置为QLineEdit;验证";方法,返回状态、新位置和新文本(如果需要进行更正(。

class AppWindow(QDialog):   
def __init__(self):
super().__init__()
self.ui = Ui_Dialog()
self.ui.setupUi(self)
self.show()
regex = QRegExp("^[0-9]{3}$")
validator = QRegExpValidator(regex, self.ui.number)
self.ui.number.setValidator(validator)

另一方面,由于";tmp";是QValidator,然后是tmp。Acceptable相当于QValidator。Acceptable,当打印它时,会获得该枚举的数值。

如果你想分析验证器状态的值,那么你有以下选项:

  • 覆盖验证(最推荐(:

    class RegExpValidator(QRegExpValidator):
    def validate(self, text, position):
    state, new_text, new_position = super().validate(text, position)
    print(state)
    return state, new_text, new_position
    
    class AppWindow(QDialog):   
    def __init__(self):
    super().__init__()
    self.ui = Ui_Dialog()
    self.ui.setupUi(self)
    self.show()
    regex = QRegExp("^[0-9]{3}$")
    validator = RegExpValidator(regex, self.ui.number)
    self.ui.number.setValidator(validator)
    
  • 调用验证方法:

    class AppWindow(QDialog):
    def __init__(self):
    super().__init__()
    self.ui = Ui_Dialog()
    self.ui.setupUi(self)
    self.show()
    self.ui.number.textChanged[str].connect(self.validate_number)
    def validate_number(self):
    regex = QRegExp("^[0-9]{3}$")
    tmp = QRegExpValidator(regex, self.ui.number)
    state, new_text, new_position = tmp.validate(
    self.ui.number.text(), self.ui.number.cursorPosition()
    )
    print(state)
    

相关内容

  • 没有找到相关文章

最新更新