我目前正在使用一种非常残酷的方法来获取QValidator将轻松提供的内容。在这个小部件上找到一个简单的信息是非常困难的。下面的代码从另一个帖子复制/粘贴(经过一些小编辑)。它创建一个对话框,其中单个lineEdit连接到ValidStringLength QValidator,该对话框强制字符串大小为0<长度< 5.我想了解在哪里放置一个字符串清理“可执行”函数:在fixup()方法中?请解释QValidator()背后的逻辑。
from PyQt4 import QtCore, QtGui
class ValidStringLength(QtGui.QValidator):
def __init__(self, min, max, parent):
QtGui.QValidator.__init__(self, parent)
self.min = min
self.max = max
def validate(self, s, pos):
print 'validate(): ', type(s), type(pos), s, pos
if self.max > -1 and len(s) > self.max:
return (QtGui.QValidator.Invalid, pos)
if self.min > -1 and len(s) < self.min:
return (QtGui.QValidator.Intermediate, pos)
return (QtGui.QValidator.Acceptable, pos)
def fixup(self, s):
pass
class Window(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
self.editLine = QtGui.QLineEdit(self)
self.validator = ValidStringLength(0,5,self)
self.editLine.setValidator(self.validator)
layout = QtGui.QVBoxLayout(self)
layout.addWidget(self.editLine)
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
window = Window()
window.setGeometry(500, 300, 500, 100)
window.show()
sys.exit(app.exec_())
答案 0 :(得分:1)
来自Qt docs:
fixup()是为可以修复某些用户错误的验证程序提供的。默认实现什么都不做。例如,如果用户按Enter(或Return)并且内容当前无效,则QLineEdit将调用fixup()。这允许fixup()函数有机会执行一些魔术来使无效字符串可接受。
http://qt-project.org/doc/qt-4.8/qvalidator.html
是的,如果你的字符串清理&#39;是尝试更正用户的输入,fixup
应该是正确的位置。
编辑:
这应该将前四个字符大写:
def validate(self, s, pos):
print 'validate(): ', type(s), type(pos), s, pos
n = min(4,s.count())
if s.left(n).compare(s.left(n).toUpper()):
return (QtGui.QValidator.Intermediate, pos)
else:
return (QtGui.QValidator.Acceptable, pos)
def fixup(self, s):
n = min(4, s.count())
s.replace(0, n, s.left(n).toUpper())