Для создания поля ввода Entry, которое принимает только цифры в Tkinter, можно использовать метод валидации. Tkinter позволяет задавать функции обратного вызова, которые будут вызываться при введении текста в поле. Это позволяет фильтровать вводимые данные и допускать только цифры.
### код:
import tkinter as tk
def validate_digit_input(new_value):
if new_value == "":
return True
elif new_value.isdigit():
return True
else:
return False
def main():
root = tk.Tk()
root.title("Entry validation example")
# Создание валидатора
validate_digit_command = root.register(validate_digit_input)
# Создание поля Entry с валидацией
entry = tk.Entry(root, validate="key", validatecommand=(validate_digit_command, '%P'))
entry.pack(padx=10, pady=10)
root.mainloop()
if __name__ == "__main__":
main()
### Объяснение:
1. Импорт библиотеки Tkinter:
import tkinter as tk
2. Функция validate_digit_input:
- Эта функция принимает один аргумент new_value, который представляет новое значение в поле Entry.
- Если new_value пустое (удаление всех символов), функция возвращает True.
- Если new_value состоит только из цифр, функция возвращает True.
- В других случаях функция возвращает False, тем самым предотвращая ввод некорректных символов.
def validate_digit_input(new_value):
if new_value == "":
return True
elif new_value.isdigit():
return True
else:
return False
3. Регистрация функции валидации в Tkinter:
- Метод root.register оборачивает функцию для использования в качестве команды валидации.
validate_digit_command = root.register(validate_digit_input)
4. Создание поля Entry с валидацией:
- Параметр validate="key" указывает, что валидация должна выполняться при каждом нажатии клавиши.
- Параметр validatecommand принимает кортеж: первый элемент это зарегистрированный валидатор, а далее именованные параметры, которые он принимает ('%P' это новый вводимый текст).
entry = tk.Entry(root, validate="key", validatecommand=(validate_digit_command, '%P'))
5. Основная функция main и запуск приложения:
- Создаем основное окно Tkinter и запускаем цикл событий.
def main():
root = tk.Tk()
root.title("Entry validation example")
validate_digit_command = root.register(validate_digit_input)
entry = tk.Entry(root, validate="key", validatecommand=(validate_digit_command, '%P'))
entry.pack(padx=10, pady=10)
root.mainloop()
if __name__ == "__main__":
main()
Этот код создает окно с одним полем Entry, которое позволяет вводить только цифры. Валидация происходит в реальном времени, предотвращая ввод некорректных символов.