Для этого конкретного примера можно использовать QValidator
класс, который обеспечивает проверку ввода текста, см пример ниже:
import sys
from PyQt4 import QtGui, QtCore
from PyQt4.QtCore import Qt, QRegExp
from PyQt4.QtGui import QRegExpValidator
def window():
app = QtGui.QApplication(sys.argv)
win = QtGui.QWidget()
flo = QtGui.QFormLayout()
e1 = QtGui.QLineEdit("0x300000000")
validator = QRegExpValidator(QRegExp("0x[3-4][0-9A-Fa-f]{1,8}"))
e1.setValidator(validator)
flo.addRow("Hexadecimal", e1)
win.setLayout(flo)
win.setWindowTitle("PyQt")
win.show()
sys.exit(app.exec_())
if __name__ == '__main__':
window()
Это валидатор будет считать допустимым значение «0x30», регулярное выражение должно быть «0x [3-4] [0-9A-Fa-f] {8}» вместо этого. Даже тогда он по-прежнему позволяет вводить промежуточные состояния, которые могут быть исправлены путем переопределения его метода 'fixup(). – mata