我在 Qt c++ 源代码的帮助下构建了一个 ASCIIValidator,它依赖于 QRegularExpression 类而不是它们的旧 QRegExp 对应物。举个例子,请看一下https://github.com/qt/qtbase/blob/dev/src/gui/util/qvalidator.cpp的第 916 行
class ASCIIValidator(QtGui.QRegularExpressionValidator):
def __init__(self):
super(ASCIIValidator, self).__init__()
self.description = ""
self.invalidInputMsg = ""
self.regex = QtCore.QRegularExpression(r"[^\x00-\x7F]")
self.setRegularExpression(self.regex)
self.regex.setCaseSensitivity(QtCore.Qt.CaseInsensitive)
def validate(self, _input: str, pos: int) -> QtGui.QValidator.State:
if self.regularExpression().pattern().isEmpty():
return QtGui.QValidator.Acceptable
match = self.regularExpression().match(_input, 0, QtCore.QRegularExpression.PartialPreferCompleteMatch)
if match.hasMatch(): # means that a non-ascii character has been foound
return QtGui.QValidator.Invalid
else:
return QtGui.QValidator.Acceptable
引发以下错误:
from util.UValidator import UValidator
File ".....\UValidator.py", line 38, in <module>
class ASCIIValidator(QtGui.QRegularExpressionValidator):
AttributeError: module 'PySide2.QtGui' has no attribute 'QRegularExpressionValidator'
但是,Qtdocs 和 PySide2 文档将 QRegularExpressionValidator 列为 QtGui 的一部分,甚至建议在旧的 QRegExp 类上使用它们。我正在使用最新的 python3 和通过 pip 安装的 pyside2。编辑:使用 PySide 5.15