Привет, Хабр! Сегодня мы научимся делать графический интерфейс на python, используя Tkinter.
Эта статья очень короткая, так как мы только начинаем делать игры, в будущем вас ждут статьи под 15–20 минут чтения, но я буду стараться не допускать сложной технической части, и разделять статьи на части.
Tkinter — это стандартная библиотека для создания графических интерфейсов в Python. Она предоставляет простой и удобный способ создания оконных приложений с использованием виджетов, таких как кнопки, метки, поля ввода и многое другое. В этой статье мы рассмотрим основные концепции Tkinter и создадим простое приложение.
Установка и настройка
Tkinter поставляется вместе с Python, даже в среде IDLE, поэтому для его использования не требуется установка дополнительных библиотек. Чтобы убедиться, что Tkinter установлен, вы можете выполнить следующий код:
import tkinter as tk
print(tk.TkVersion)
Если вы видите версию Tkinter, значит, все настроено правильно.
Основные концепции Tkinter
Создание окна
Первый шаг в создании приложения с использованием Tkinter — это создание основного окна. Это делается с помощью класса Tk.
import tkinter as tk
root = tk.Tk()
root.title("Мое первое окно")
root.geometry("400x300")
root.mainloop()
Вы увидите пустое окно маленького размера.
Виджеты
Виджеты — это основные элементы интерфейса, такие как кнопки, метки, поля ввода и т.д. В Tkinter виджеты создаются и размещаются в окне с помощью различных методов.
Метки (Labels)
Метки используются для отображения текста или изображений.
label = tk.Label(root, text="Привет, мир!")
label.pack
Кнопки (Buttons)
Кнопки используются для выполнения действий при нажатии.
def on_button_click():
print("Кнопка нажата!")
button = tk.Button(root, text="Нажми меня", command=on_button_click)
button.pack()
Поля ввода (Entries)
Поля ввода используются для ввода текста.
entry = tk.Entry(root)
entry.pack()
Размещение виджетов
В Tkinter существует несколько способов размещения виджетов в окне:
pack()
— простой способ размещения виджетов в стопку.grid()
— более гибкий способ размещения виджетов в таблице.place()
— размещение виджетов в абсолютных координатах.
Пример использования grid()
label1 = tk.Label(root, text="Имя:")
label1.grid(row=0, column=0)
entry1 = tk.Entry(root)
entry1.grid(row=0, column=1)
label2 = tk.Label(root, text="Фамилия:")
label2.grid(row=1, column=0)
entry2 = tk.Entry(root)
entry2.grid(row=1, column=1)
Пример приложения
Теперь давайте создадим простое приложение, которое будет запрашивать имя пользователя и отображать приветственное сообщение.
import tkinter as tk
def on_button_click():
name = entry.get()
label.config(text=f"Привет, {name}!")
root = tk.Tk()
root.title("Приветственное приложение")
root.geometry("300x200")
label = tk.Label(root, text="Введите ваше имя:")
label.pack()
entry = tk.Entry(root)
entry.pack()
button = tk.Button(root, text="Отправить", command=on_button_click)
button.pack()
root.mainloop()
Заключение
Tkinter — это мощный инструмент для создания графических интерфейсов на Python. Он предоставляет множество виджетов и методов для размещения, что делает его гибким и удобным в использовании. Надеюсь, эта статья помогла вам понять основные концепции Tkinter и вдохновила на создание собственных приложений.
Спасибо за внимание! Если у вас есть вопросы или предложения, оставляйте их в комментариях.
Комментарии (20)
sindzicat
02.11.2024 16:34Простите, но в этой статье вы не нарисовали на tkinter ничего.
TheScienceVictor200 Автор
02.11.2024 16:34Это будет в следующей части, здесь я лишь научил создавать окна и взаимодействовать с ним.
densss2
02.11.2024 16:34Как раз, скриншоты окон, героически Вами созданных, можно было и приложить к статье.
IvanZaycev0717
02.11.2024 16:34Я баловался и pygame и tkinter. И скажу, если вы действительно хотите создать какую-то мало мальски серьёзную игру, то изучайте лучше Unity или Unreal Engine.
Что tkinter, что pygame - это скорее не про игры, а про то, чтобы отточить навыки программирования - базовы синтаксис, ООП (которого нет в вашей статье).
Всё таки, я считаю, что библиотеки надо использовать по их назначению: для десктопа использовать tkinter, для игр - pygame. Не надо забивать гвозди с помощью перфоратора.
Pygame заточен для работы со спрайтами - там даже есть такой класс Sprite.
Также есть другой вариант - это веб-игры, а их пишут на языке JavaScript. Можно посмотреть и в эту сторону
TheScienceVictor200 Автор
02.11.2024 16:34Я не изучал JavaScript, но могу начать. В целом веб-разработка — это отдельная тема, которую стоит изучить мне и другим читателям. Я изучаю C++ и, если выпадет случай, буду писать игры на нём, но пока я только начинаю.
IvanZaycev0717
02.11.2024 16:34JavaScript стоит изучать если вы хотите стать fullstack разработчиком. Для себя я сделал такой вывод: достаточно выучить очень глубоко Python: синтаксис, ООП, алгоритмы и структуры данных, решать задачи на LeetCode. Потом изучить JavaScript будет очень и очень легко, т.к. вы со всем этим уже знакомы + у JavaScipt такая же как и Python динамическая неявная типизация, да и язык тоже интерпретируемый. Единственное отличие от Python - это слабая типизация (грубо говоря, вы можете сложить строку с числом и получить строку), из чего появляютя операторы сравнения == и ===.
Я скажу честно, я С++ знаю на оценку "2 с плюсом", очень сложный язык, не для моего ума. Тем не менее глубоко изучил Python, и базу JavaScript с фрейворком Vue.js. И мне этого вполне хватает, чтобы закрывать рабочие таски
egor_why
02.11.2024 16:34На pygame реально сделать такую игрушку как Heroes Of Might And Magic до версии 4 включительно - это круто, но это действительно плоский мир.
Shizzza
02.11.2024 16:34"Учимся создавать игры без pygame" - вот так можно сделать кнопку и текст, всем пока. Как-то скудно, что-ли?
TheScienceVictor200 Автор
02.11.2024 16:34Согласен, но это только первая часть. Это только введение. Я уже пишу код для следующей статьи. Там уже будет полноценный геймплей и графика. Так же будут скриншоты с игрой.
JerryI
02.11.2024 16:34Смысл бить тогда на части? Это ж не "пост"
TheScienceVictor200 Автор
02.11.2024 16:34Я не могу прям сразу написать код всей игры, тем более, что я слишком медленно нажимаю на клавиши, а пишу код своими руками. Там будет очень большой набор возможностей, десяток видов блоков, редактор уровней и т.д. а за день-два я написать всё не могу.
Fox_exe
02.11.2024 16:34Когда вы пишите "Делаем игру" - пишите про создание игры, а не про азы TKinter. Статья из 3х абзацев - это не статья, а какая-то заметка для GitHub Gists...
dev_KoT
02.11.2024 16:34У вас что, какой-то дедлайн? Что мешает просто дописать полноценный вводный курс, хоть и на это уйдет больше времени?
JerryI
02.11.2024 16:34Вот когда это все сделаете или здоровую часть от этого - пишите. Хабр это немного не про «мой личный блог». У читателей не 10 секундная память и Ваш «курс» не станет неактуальным через неделю, смысл чет торопиться, выдавать по грошу
KaminskyIlya
02.11.2024 16:3490% игры - это контент : графика сюжет музыкальное оформление. вас нужен не питон , а blender, substant painter, corel, Photoshop, и почие инструменты. Вера в то, что выбрав хайповый язык Вы сразу превратитесь в игродела... хм... был бы у меня falcon9 я бы стал космонавтом. но увы
TheScienceVictor200 Автор
02.11.2024 16:34Спойлер следующей части
Это не всё, что там будет.
UghBugs04
02.11.2024 16:34Чё-то как-то слишком круто разделил. Можно ещё каждый шаг на посты разделить. Добавил библиотеку - пост. Написал первую переменную - пост. Навёл мышку на закрыть окно - пост.
Konstantin_pro_java
02.11.2024 16:34Я думаю, что mainloop лучше не использовать, а цикл создавать вручную. Ведь скорее всего у вас в игре будут объекты, изменение которых не зависит от внешних событий. Их вы как будете обрабатывать?
FurySeer
Очередное упражнение с GPT?