Разрешить только диапазон входов в поле ввода в Tkinter - PullRequest
0 голосов
/ 01 апреля 2020

Мне нужно реализовать поле ввода, которое принимает только диапазон значений DoubleVar. Я ссылался на этот вопрос, который был задан Как разрешить только определенные параметры в поле ввода на Tkinter , но я хочу, чтобы пользователь был уведомлен (используя изменение цвета шрифта или что-либо еще), когда они вводят ценности. Я прочитал документацию, но с этим я не сталкивался. Я новичок в Tkinter, поэтому, пожалуйста, извините, если это звучит очень глупо

Ответы [ 2 ]

1 голос
/ 02 апреля 2020

Вы можете привязать событие KeyRelease Entry к обратному вызову и проверить, является ли введенное значение действительным и находится ли в требуемом диапазоне, а затем соответствующим образом обновить цвет переднего плана Entry:

import tkinter as tk

root = tk.Tk()

def check_value(entry, min_value, max_value):
    try:
        value = float(entry.get().strip())
        valid = min_value <= value <= max_value
    except ValueError:
        valid = False
    entry.config(fg='black' if valid else 'red')
    return valid  # in case you want the checking result somewhere else

entry = tk.Entry(root)
entry.pack()
entry.bind('<KeyRelease>', lambda e: check_value(e.widget, 10, 20))

root.mainloop()
0 голосов
/ 02 апреля 2020

Используйте параметр validatecommand для Entry.

Некоторые фрагменты кода, чтобы показать, как это работает:

root = tk.Tk()

vcmd = root.register(is_number)

e = ttk.Entry(pressf, justify='right', validate='key', validatecommand=(vcmd, '%P'))

def is_number(data):
    """Validate the contents of an entry widget as a float."""
    if data == '':
        return True
    try:
        rv = float(data)
        if rv < 0:
            return False
    except ValueError:
        return False
    return True

Это в основном вызывает функцию проверки при каждом нажатии клавиши. Только если проверка прошла успешно, символ добавляется в запись.

Вы можете найти полный рабочий пример здесь .

Редактировать

Выше приведен «канонический» пример валидатора. Это позволяет или запрещает символы в Entry.

Но вы также можете использовать его другими способами. Например, вы всегда можете вернуть True, но, например, изменить цвет текста Entry на красный, если значение выходит за пределы желаемого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...