Python

Tkinter Python: как сделать первое окно

Tkinter позволяет создать простое desktop-окно на Python без установки тяжелых GUI-фреймворков. Для первого шага достаточно создать Tk(), задать заголовок, добавить текст и запустить mainloop()

Tkinter подходит для учебных окон, маленьких утилит, форм ввода и прототипов. Для сложных современных интерфейсов могут понадобиться другие инструменты, но начать проще именно с него

По этой теме полезно отдельно посмотреть Составьте еженедельное расписание занятий, чтобы расширить контекст и сравнить подходы

По этой теме полезно отдельно посмотреть Аннотации типов для декораторов в Python, чтобы расширить контекст и сравнить подходы

Первое окно

import tkinter as tk

root = tk.Tk()
root.title('Первое окно')

label = tk.Label(root, text='Привет, Tkinter')
label.pack(padx=20, pady=20)

root.mainloop()

После запуска откроется окно с текстом. Если скрипт сразу завершился, проверьте, есть ли строка root.mainloop()

mainloop() запускает цикл обработки событий: окно ждет кликов, ввода с клавиатуры, перемещения и закрытия

Размер окна

import tkinter as tk

root = tk.Tk()
root.title('Мини-приложение')
root.geometry('320x180')

tk.Label(root, text='Окно 320 на 180').pack(pady=20)

root.mainloop()

geometry('320x180') задает ширину и высоту окна в пикселях

Кнопка с обработчиком

import tkinter as tk

def say_hello():
    label.config(text='Кнопка нажата')

root = tk.Tk()
root.title('Кнопка')
root.geometry('320x180')

label = tk.Label(root, text='Нажмите кнопку')
label.pack(pady=20)

button = tk.Button(root, text='Нажать', command=say_hello)
button.pack()

root.mainloop()

command=say_hello передает функцию, которую Tkinter вызовет при нажатии. Скобки писать не нужно: command=say_hello, а не command=say_hello()

Поле ввода Entry

import tkinter as tk

def greet():
    name = entry.get()
    label.config(text=f'Привет, {name}')

root = tk.Tk()
root.title('Приветствие')
root.geometry('340x180')

entry = tk.Entry(root)
entry.pack(pady=10)

button = tk.Button(root, text='Поздороваться', command=greet)
button.pack()

label = tk.Label(root, text='Введите имя')
label.pack(pady=10)

root.mainloop()

entry.get() получает текст из поля ввода. label.config() меняет текст уже созданного виджета

Такой пример показывает базовую логику GUI: пользователь вводит данные, нажимает кнопку, программа меняет интерфейс

pack, grid и place

В Tkinter есть несколько способов расположения элементов

pack() быстро размещает элементы сверху вниз или слева направо

grid() раскладывает элементы по строкам и колонкам

place() задает координаты вручную

Для первого окна проще использовать pack()

tk.Label(root, text='Имя').pack()
tk.Entry(root).pack()
tk.Button(root, text='OK').pack()

Не смешивайте pack() и grid() внутри одного и того же контейнера без понимания. Это частая причина странной верстки

Кнопка закрытия

import tkinter as tk

root = tk.Tk()
root.title('Закрытие окна')
root.geometry('300x150')

tk.Button(root, text='Закрыть', command=root.destroy).pack(pady=40)

root.mainloop()

root.destroy закрывает окно и завершает Tkinter-приложение

Мини-приложение со счетчиком

Этот пример показывает, как хранить состояние и менять текст после каждого клика

import tkinter as tk

count = 0

def increase():
    global count
    count += 1
    label.config(text=f'Нажатий: {count}')

root = tk.Tk()
root.title('Счетчик')
root.geometry('300x160')

label = tk.Label(root, text='Нажатий: 0')
label.pack(pady=20)

button = tk.Button(root, text='Увеличить', command=increase)
button.pack()

root.mainloop()

Для первого учебного примера global допустим, но в более аккуратном приложении состояние лучше хранить в классе или отдельном объекте

Структура через функцию main

Чтобы код не расползался, можно завернуть создание окна в функцию

import tkinter as tk

def main():
    root = tk.Tk()
    root.title('Первое окно')

    tk.Label(root, text='Привет').pack(padx=20, pady=20)

    root.mainloop()

if __name__ == '__main__':
    main()

Такой вид удобнее, когда файл начинает расти: появляются функции-обработчики, настройки окна и дополнительные виджеты

Частые ошибки

Забыть root.mainloop()

Написать command=handler() вместо command=handler

Создавать несколько tk.Tk() вместо дополнительных окон

Смешивать pack() и grid() в одном контейнере

Запускать Tkinter на сервере без графической оболочки

Делать долгую операцию прямо в обработчике кнопки, из-за чего окно зависает

Практические задачи

Измените заголовок окна

Добавьте Entry и кнопку, которая читает введенный текст

Сделайте кнопку очистки поля

Добавьте Label, который показывает количество символов в поле

Поменяйте размер окна через geometry()

Сделайте кнопку закрытия через root.destroy

Первое окно Tkinter состоит из четырех шагов: создать root = tk.Tk(), настроить окно, добавить виджеты, запустить root.mainloop()

После первого окна добавьте кнопку, поле ввода и обработчик события. Так вы быстро увидите, как desktop-интерфейс связывается с обычным Python-кодом

Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные

Настройки cookie

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x