Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как разрешить ввод в Entry (Tkinter) ТОЛЬКО цифры

Денис Афонин Знаток (313), на голосовании 4 месяца назад
Я пишу простенькую программу, и в ней надо сделать так, что бы в поле Entry можно было вводить ТОЛЬКО цифры, заранее спасибо
Голосование за лучший ответ
Татьяна Просветленный (36374) 5 месяцев назад
Для создания поля ввода 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, которое позволяет вводить только цифры. Валидация происходит в реальном времени, предотвращая ввод некорректных символов.
Похожие вопросы