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

Справочник по Tkinter

Назначение

Справочник-шпаргалка по Tkinter. Не заменяет пошаговое обучение. Курс: Tkinter и GUI, Первая программа на Tkinter.


Импорт и корневое окно

import tkinter as tk
from tkinter import ttk # темизированные виджеты

root = tk.Tk() # главное окно
child = tk.Toplevel() # дочернее окно
Метод TkДействие
title(str)Заголовок окна
geometry("WxH+X+Y")Размер и позиция
minsize(w, h)Минимальный размер
resizable(w, h)Разрешить изменение размера
mainloop()Цикл событий
destroy()Закрыть окно
after(ms, func)Отложенный вызов
protocol("WM_DELETE_WINDOW", fn)Обработчик закрытия крестиком

Виджеты

КлассНазначение
LabelТекст / изображение
ButtonКнопка (command=callable)
EntryОднострочный ввод
TextМногострочный ввод
ListboxСписок строк
CheckbuttonФлажок
RadiobuttonПереключатель группы
ScaleПолзунок
SpinboxЧисло со стрелками
Frame / LabelFrameКонтейнер
CanvasРисование, кастомная графика
MenuМеню
PanedWindowРазделители панелей

ttk: Treeview, Notebook (вкладки), Progressbar, Combobox — единый стиль ОС.


Переменные привязки

var = tk.StringVar(value="начало")
entry = tk.Entry(root, textvariable=var)
var.set("новое")
print(var.get())
КлассТип
StringVarstr
IntVarint
DoubleVarfloat
BooleanVarbool

Геометрия

pack

widget.pack(side=tk.TOP, fill=tk.X, expand=True, padx=5, pady=5)

side: TOP, BOTTOM, LEFT, RIGHT.

grid

widget.grid(row=0, column=1, sticky="ew", padx=4, pady=4)
child.grid_columnconfigure(0, weight=1)

sticky: n, s, e, w или комбинации ("ew").

place

Абсолютное или относительное позиционирование — для редких случаев.


События

def on_click(event):
print(event.x, event.y)

btn.bind("<Button-1>", on_click)
entry.bind("<Return>", lambda e: submit())
root.bind("<Control-q>", lambda e: root.destroy())
ШаблонСобытие
<Button-1>ЛКМ
<Double-Button-1>Двойной клик
<Key>Клавиша
<FocusIn> / <FocusOut>Фокус
<Configure>Изменение размера

Диалоги (tkinter.messagebox, filedialog)

from tkinter import messagebox, filedialog, colorchooser

messagebox.showinfo("Заголовок", "Текст")
messagebox.askyesno("?", "Продолжить?")
path = filedialog.asksaveasfilename(defaultextension=".txt")
color = colorchooser.askcolor()

Паттерны

Блокировка UI при долгой задаче — работа в потоке, обновление UI через root.after(0, callback) из потока (не вызывайте виджеты напрямую из фонового потока).

Класс приложения:

class App(tk.Tk):
def __init__(self):
super().__init__()
self.build_ui()
def build_ui(self):
...

См. также


См. также

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