Перейти к основному содержимому

Первая программа на Tkinter

Разработчику Архитектору

Первая программа на Tkinter

Tkinter входит в стандартную поставку CPython — отдельная установка не нужна. Сделаем окно «Конвертер °C → °F» с полем ввода, кнопкой и меткой результата.

Теория GUI: Tkinter и GUI. Шпаргалка: Справочник по Tkinter.


Минимальное окно

import tkinter as tk

root = tk.Tk()
root.title("Привет, Tkinter")
root.geometry("320x120")

label = tk.Label(root, text="Окно работает")
label.pack(pady=20)

root.mainloop()

mainloop() запускает цикл обработки событий — без него окно сразу закроется.


Конвертер температуры

import tkinter as tk
from tkinter import messagebox


def convert():
raw = entry.get().strip().replace(",", ".")
try:
celsius = float(raw)
except ValueError:
messagebox.showerror("Ошибка", "Введите число, например 25")
return
fahrenheit = celsius * 9 / 5 + 32
result_var.set(f"{celsius:.1f} °C = {fahrenheit:.1f} °F")


root = tk.Tk()
root.title("Конвертер температуры")
root.resizable(False, False)

frame = tk.Frame(root, padx=16, pady=16)
frame.pack()

tk.Label(frame, text="Температура (°C):").grid(row=0, column=0, sticky="w")
entry = tk.Entry(frame, width=12)
entry.grid(row=0, column=1, padx=(8, 0))
entry.focus_set()

result_var = tk.StringVar(value="—")
tk.Label(frame, textvariable=result_var).grid(row=1, column=0, columnspan=2, pady=(12, 0))

btn_row = tk.Frame(frame)
btn_row.grid(row=2, column=0, columnspan=2, pady=(12, 0))
tk.Button(btn_row, text="Перевести", command=convert).pack(side=tk.LEFT, padx=4)
tk.Button(btn_row, text="Выход", command=root.destroy).pack(side=tk.LEFT, padx=4)

entry.bind("<Return>", lambda _e: convert())

root.mainloop()

pack и grid

  • pack — укладка «стопкой» или «в ряд» (простые формы).
  • grid — таблица строк и столбцов (формы с выравниванием).

Не смешивайте pack и grid в одном родительском контейнере.


Диалоги и меню (кратко)

from tkinter import filedialog

path = filedialog.askopenfilename(
title="Выберите файл",
filetypes=[("Текст", "*.txt"), ("Все", "*.*")],
)

Меню:

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)

Типичные ошибки

СимптомПричина
Окно «мигает» и закрываетсяНет mainloop()
TclError: cannot use geometry manager grid inside ... packСмешаны pack и grid
Интерфейс «зависает» при долгой операцииТяжёлую работу выносите в threading или after()

Куда двигаться дальше

ЦельИнструмент
Богаче UI на PythonPyQt6 / PySide6 — см. Экосистема Python-приложений
Веб-UI + Python-бэкендFlask/FastAPI + pywebview
Кроссплатформенный десктоп на JSElectron

См. также

Другие статьи этого же раздела в боковом меню (как на странице «О разделе»).