Я хотел бы использовать QLineEdit для ввода пользователем значений. Я хочу ограничить ввод между диапазоном, поэтому я должен использовать QDoubleValidator. Я хотел бы, чтобы это работало так, что если они превышают допустимое значение, оно устанавливает для текста значение top(), а если они опускаются ниже, оно устанавливает его в значение bottom().
Я рассмотрел использование сигналов textChanged, returnPressed и inputRejected. Причина, по которой у меня возникают проблемы, заключается в том, что после того, как я установил валидатор с диапазоном, returnPressed не войдет в функцию check_validator, о которой они упоминают здесь. Затем я подумал, что, может быть, я смогу поймать его с отклоненным входным сигналом, но по какой-то причине это тоже не работает. Вот код:
class LineEdit(QLineEdit):
def __init__(self, text, parent=None):
super(LineEdit, self).__init__(parent)
self.validator = QDouble Validator()
self.setValidator(self.validator)
self.text = text
self.textChanged.connect(self.new_text)
self.returnPressed(self.check_validator)
def new_text(self, text):
self.ntext = text
def check validator:
try:
if float(self.ntext) > self.validator.top():
self.text = str(self.validator.top()
if float(self.ntext) < self.validator.bottom():
self.text = str(self.validator.bottom()
else:self.text = self.ntext
self.setText(self.text)
except:
mssg = QMessageBox.about(self, "Error", "Input can only be a number")
mssg.exec()
self.setText(self.text)
def valRange(self, x1, x2):
self.validator.setRange(x1, x2)
Я также получаю сообщение об ошибке атрибута, говорящее, что объект «noneType» не имеет атрибута «exec», когда окно всплывает. Я думаю, что мне не хватает шага о том, как правильно закрыть это окно.