Окно и виджеты
Tkinter — библиотека для программ с окнами, которая входит в сам Python. Ставить ничего не нужно: import tkinter работает сразу после установки Python на Windows и macOS.
Первое окно
import tkinter as tk
root = tk.Tk() # главное окно
root.title("Привет") # заголовок
root.geometry("400x200") # размер: ширина x высота
label = tk.Label(root, text="Привет, Tkinter!", font=("Segoe UI", 16))
label.pack(pady=20) # показать в окне с отступом 20 px сверху и снизу
root.mainloop() # цикл событий: окно живёт, пока его не закроют
Три шага повторяются в любой программе на Tkinter:
- создать окно
tk.Tk(); - создать виджеты — надписи, кнопки, поля — и разместить их (
pack,gridилиplace); - запустить
mainloop().
После mainloop() код выполнится, только когда окно закроют.
Виджеты и их параметры
Первым аргументом виджет получает родителя — окно или рамку, в которой он лежит. Остальное — именованные параметры:
| Виджет | Что это | Частые параметры |
|---|---|---|
Label |
надпись | text, font, fg, bg |
Button |
кнопка | text, command |
Entry |
поле ввода в одну строку | width, show="*" |
Scale |
ползунок | from_, to, orient, command |
Frame |
рамка-контейнер для других виджетов | padx, pady |
Параметры можно поменять потом через config:
label.config(text="Новый текст", fg="green")
Кнопка и функция
Кнопка вызывает функцию из параметра command — без скобок, ведь функцию нужно передать, а не вызвать сразу:
count = 0
def on_click():
global count
count += 1
label.config(text=f"Нажато: {count}")
tk.Button(root, text="Нажми", command=on_click).pack()
Размер и положение окна
geometry принимает строку "ШxВ+X+Y": ширина, высота и координаты левого верхнего угла окна от левого верхнего угла экрана. Размер экрана узнают так:
sw = root.winfo_screenwidth()
sh = root.winfo_screenheight()
root.geometry(f"400x200+{(sw - 400) // 2}+{(sh - 200) // 2}") # по центру
Код логики — отдельно от окна
В задачах курса программа устроена так:
def caption(n): # логика: её проверяют тесты
...
if __name__ == "__main__": # окно: только при обычном запуске
root = tk.Tk()
...
Кнопка «Запустить у себя» откроет окно, а при «Отправить» тесты вызывают только функцию — без окна. Так же удобно писать и свои программы: логику легко проверить, а интерфейс тонкий.
Итог
tk.Tk()→ виджеты →pack/grid/place→mainloop();Label,Button(command=функция),config(...)меняет параметры;geometry("ШxВ+X+Y"),winfo_screenwidth();- логику держим в функциях, окно — под
if __name__ == "__main__".