Первая программа на Tkinter
Первая программа на Tkinter
Где применяют Tkinter
Tkinter входит в стандартную поставку CPython — отдельная установка не нужна. Это самый быстрый способ показать окно с кнопками на уроке или в утилите: установили Python — уже можно рисовать UI.
Мы сделаем "Конвертер °C → °F" и разберём mainloop() — без него окно исчезнет, как app.exec() в Qt.
Теория: Tkinter и GUI. Элементы UI по рецептам: Справочник по Tkinter — элементы UI. Галерея примеров: Tkinter — окна и виджеты. Богаче UI: PyQt6. Общая теория десктопа: Архитектура десктопных приложений · Особенности разработки десктопных приложений.
Что получится
Поле ввода, кнопки "Перевести" и "Выход", метка результата, Enter в поле вызывает расчёт.
Минимальное окно
import tkinter as tk
root = tk.Tk()
root.title("Привет, Tkinter")
root.geometry("320x120")
label = tk.Label(root, text="Окно работает")
label.pack(pady=20)
root.mainloop()
Разбор фрагмента:
tk.Tk()создаёт главное окно приложения.Labelдобавляет статический текст, аpack(pady=20)размещает его с вертикальным отступом.mainloop()запускает цикл событий; без него окно не будет интерактивным и быстро закроется.
mainloop() запускает цикл обработки событий — без него окно сразу закроется.
Конвертер температуры
Код ITЗагрузка примера кода…
Разбор фрагмента:
- Функция
convert()получает строку изEntry, приводит её к числу и считает перевод в Фаренгейты. try/except ValueErrorотлавливает нечисловой ввод и показываетmessagebox.showerror(...).StringVar(result_var) связан с меткой, поэтому результат появляется в интерфейсе сразу послеset(...).command=convertиentry.bind("<Return>", ...)дают два способа запуска одной логики: кнопкой и Enter.
pack и grid
pack— укладка "стопкой" или "в ряд" (простые формы).grid— таблица строк и столбцов (формы с выравниванием).
Не смешивайте pack и grid в одном родительском контейнере.
Диалоги и меню
from tkinter import filedialog
path = filedialog.askopenfilename(
title="Выберите файл",
filetypes=[("Текст", "*.txt"), ("Все", "*.*")],
)
Разбор фрагмента:
filedialog.askopenfilename(...)открывает системный диалог выбора файла.filetypesзадаёт фильтр расширений и помогает пользователю выбрать корректный тип документа.- Результат записывается в
path; если диалог закрыт через Cancel, вернётся пустая строка.
Меню:
menubar = tk.Menu(root)
file_menu = tk.Menu(menubar, tearoff=0)
file_menu.add_command(label="Выход", command=root.destroy)
menubar.add_cascade(label="Файл", menu=file_menu)
root.config(menu=menubar)
Разбор фрагмента:
Menu(root)создаёт верхнее меню окна.file_menu.add_command(...)добавляет команду в подменю.add_cascade(...)привязывает подменю к пунктуФайл.root.config(menu=menubar)активирует меню в приложении.
Частые ошибки
| Симптом | Причина |
|---|---|
| Окно "мигает" и закрывается | Нет mainloop() |
TclError: cannot use geometry manager grid inside ... pack | Смешаны pack и grid |
| Интерфейс "зависает" при долгой операции | Тяжёлую работу выносите в threading или after() |
TclError: no display name | Нет GUI (SSH без X11) — нужен X forwarding или другой хост |
Что попробовать
- Перепишите форму на
grid: метки в столбец 0, поля в столбец 1. ttk.Buttonиttk.Entry— вид ближе к системному стилю.- Сохраните результат в файл через
filedialog.asksaveasfilename. - Расширьте навыки — галерея примеров — окна, формы, меню.
Дальше
| Цель | Инструмент |
|---|---|
| Больше готовых примеров с разбором | Tkinter — окна и виджеты |
| Богаче UI на Python | PyQt6 / PySide6 — см. Экосистема Python-приложений |
| Веб-UI + Python-бэкенд | Flask/FastAPI + pywebview |
| Кроссплатформенный десктоп на JS | Electron |
| Те же задачи на C# / .NET | C# WinForms и WPF (Lab) |
В подборках
Статья входит в тематические подборки и блок "С чего начать?" на главной. Соседние шаги того же маршрута:
Первые шаги (маршрут подборки) — Первая программа на Django REST Framework, Первая программа на PyQt6, Первая программа на Django, Первая программа на Flask, Первая программа на Next.js, Первая программа на FastAPI.