В настоящее время я использую довольно жестокий подход, чтобы получить то, что QValidator легко доставил бы. Найти простую информацию об этом виджете довольно сложно. Код ниже скопирован/вставлен (после небольшого редактирования) из другого поста. Он создает диалог с одной строкойEdit, подключенный к 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_())
Acceptable
, lineEdit вызоветfixup
, и вы сможете изменить строку на месте (QStrings изменяемы, в отличие от строк Python). Если измененная строка действительна, lineEdit изменит отображаемый текст. Я добавил проверенный пример. 17.04.2014fixup
иvalidate
должны будут вернуть измененную строку. 17.04.2014