Глава 16 · Создаём классные приложения с Tkinter

Мини-проект — приложение-калькулятор чаевых

Первое полноценное приложение книги — с полями ввода, кнопкой и результатом на экране.

Соберём всё изученное в главе в одном настоящем приложении: калькулятор чаевых с полем ввода, кнопкой и меткой результата.

kalkulyator_chaevyh.py
import tkinter as tk

root = tk.Tk()
root.title("Калькулятор чаевых")

tk.Label(root, text="Сумма счёта:").grid(row=0, column=0, padx=10, pady=10)
schet_entry = tk.Entry(root)
schet_entry.grid(row=0, column=1)

tk.Label(root, text="Процент чаевых:").grid(row=1, column=0, padx=10, pady=10)
procent_entry = tk.Entry(root)
procent_entry.grid(row=1, column=1)

rezultat_label = tk.Label(root, text="", font=("Arial", 14, "bold"))
rezultat_label.grid(row=3, column=0, columnspan=2, pady=10)

def poschitat():
    schet = float(schet_entry.get())
    procent = float(procent_entry.get())
    chaevye = schet * procent / 100
    rezultat_label.config(text=f"Чаевые: {chaevye:.2f}")

tk.Button(root, text="Посчитать", command=poschitat).grid(row=2, column=0, columnspan=2)

root.mainloop()
Какие темы здесь встретились
grid() — этот раздел; float() — глава 4; форматирование :.2f — глава 8; сама формула чаевых — глава 12, проект 12-2.
★★★ Задача повышенной сложности
Проверка ввода

Оберните вычисление в try/except (забегая немного вперёд — подробно об этом в главе 21) — чтобы приложение не падало, если пользователь введёт не число, а текст.

Итоги

Что мы узнали в этой главе

  • tk.Tk() создаёт главное окно; mainloop() запускает цикл обработки событий.
  • Основные виджеты: Label, Button, Entry, Text, Radiobutton, Checkbutton.
  • command=функция связывает кнопку с действием — без скобок после имени функции.
  • pack() и grid() — два способа размещения виджетов; не смешивать их в одном контейнере.
  • Специальные переменные Tkinter (StringVar и другие) автоматически обновляют связанные с ними виджеты.