Поля ввода
Поле ввода Entry — главный способ получить от пользователя текст: имя, число, пароль.
Entry: get, insert, delete
entry = tk.Entry(root, font=("Segoe UI", 14), width=20)
entry.pack()
entry.insert(0, "Аня") # вставить текст в позицию 0
text = entry.get() # прочитать — всегда строка
entry.delete(0, tk.END) # стереть всё
entry.focus() # поставить курсор в поле
show="*"прячет символы — для паролей;justify="center"— выравнивание текста;entry.bind("<Return>", ...)— реакция на Enter (подробнее оbind— в следующей теме).
Текст → число
get() возвращает строку. Перевод в число может не получиться — это нормальная ситуация, а не авария:
def on_click():
try:
c = float(entry.get().strip().replace(",", "."))
except ValueError:
result.config(text="Введите число")
return
result.config(text=f"{c * 9 / 5 + 32:.1f} °F")
Учтите две особенности float: он принимает слова inf, nan, infinity (проверка — math.isfinite), а запятую как разделитель — нет.
StringVar — переменная, привязанная к виджету
name = tk.StringVar(value="Гость")
tk.Entry(root, textvariable=name).pack()
tk.Label(root, textvariable=name).pack() # надпись меняется вместе с полем
print(name.get())
name.set("Аня")
Есть также IntVar, DoubleVar и BooleanVar — для флажков Checkbutton.
Проверка при вводе
Можно не пускать в поле неправильные символы. Перед каждой правкой Tkinter вызывает функцию проверки и передаёт ей текст, который получится после правки (%P):
def allowed(new):
return new == "" or (new.isdecimal() and len(new) <= 3)
check = root.register(allowed)
entry = tk.Entry(root, validate="key", validatecommand=(check, "%P"))
Если функция вернёт False, нажатие просто не сработает. Не забывайте пустую строку — иначе пользователь не сможет стереть последний символ.
Осторожно с isdigit(): «цифрами» для него считаются и ², и ٣ (арабская тройка). Надёжнее перечислить разрешённые символы явно: all(ch in "0123456789" for ch in new).
Сообщения пользователю
from tkinter import messagebox
messagebox.showinfo("Готово", "Вы зарегистрированы")
messagebox.showerror("Ошибка", "Неверный пароль")
if messagebox.askyesno("Выход", "Закрыть программу?"):
root.destroy()
Хорошая форма показывает все ошибки сразу, а не по одной: собирайте их в список и выводите вместе.
Итог
Entry:get()— строка,insert,delete(0, tk.END),show="*";- превращение в число — в
try/except ValueError, плюсmath.isfinite; StringVarсвязывает поле и надпись;validatecommand=(root.register(f), "%P")— фильтр при вводе;messagebox— всплывающие сообщения.