Привет, Хабр! Сегодня мы научимся делать графический интерфейс на 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)


  1. FurySeer
    02.11.2024 16:34

    Очередное упражнение с GPT?


  1. sindzicat
    02.11.2024 16:34

    Простите, но в этой статье вы не нарисовали на tkinter ничего.


    1. TheScienceVictor200 Автор
      02.11.2024 16:34

      Это будет в следующей части, здесь я лишь научил создавать окна и взаимодействовать с ним.


      1. densss2
        02.11.2024 16:34

        Как раз, скриншоты окон, героически Вами созданных, можно было и приложить к статье.


  1. IvanZaycev0717
    02.11.2024 16:34

    Я баловался и pygame и tkinter. И скажу, если вы действительно хотите создать какую-то мало мальски серьёзную игру, то изучайте лучше Unity или Unreal Engine.

    Что tkinter, что pygame - это скорее не про игры, а про то, чтобы отточить навыки программирования - базовы синтаксис, ООП (которого нет в вашей статье).

    Всё таки, я считаю, что библиотеки надо использовать по их назначению: для десктопа использовать tkinter, для игр - pygame. Не надо забивать гвозди с помощью перфоратора.

    Pygame заточен для работы со спрайтами - там даже есть такой класс Sprite.

    Также есть другой вариант - это веб-игры, а их пишут на языке JavaScript. Можно посмотреть и в эту сторону


    1. mihaillumi
      02.11.2024 16:34

      Добавлю ещё про renpy (если хочется делать визуальные новеллы)


    1. TheScienceVictor200 Автор
      02.11.2024 16:34

      Я не изучал JavaScript, но могу начать. В целом веб-разработка — это отдельная тема, которую стоит изучить мне и другим читателям. Я изучаю C++ и, если выпадет случай, буду писать игры на нём, но пока я только начинаю.


      1. IvanZaycev0717
        02.11.2024 16:34

        JavaScript стоит изучать если вы хотите стать fullstack разработчиком. Для себя я сделал такой вывод: достаточно выучить очень глубоко Python: синтаксис, ООП, алгоритмы и структуры данных, решать задачи на LeetCode. Потом изучить JavaScript будет очень и очень легко, т.к. вы со всем этим уже знакомы + у JavaScipt такая же как и Python динамическая неявная типизация, да и язык тоже интерпретируемый. Единственное отличие от Python - это слабая типизация (грубо говоря, вы можете сложить строку с числом и получить строку), из чего появляютя операторы сравнения == и ===.

        Я скажу честно, я С++ знаю на оценку "2 с плюсом", очень сложный язык, не для моего ума. Тем не менее глубоко изучил Python, и базу JavaScript с фрейворком Vue.js. И мне этого вполне хватает, чтобы закрывать рабочие таски


    1. egor_why
      02.11.2024 16:34

      На pygame реально сделать такую игрушку как Heroes Of Might And Magic до версии 4 включительно - это круто, но это действительно плоский мир.


  1. Shizzza
    02.11.2024 16:34

    "Учимся создавать игры без pygame" - вот так можно сделать кнопку и текст, всем пока. Как-то скудно, что-ли?


    1. TheScienceVictor200 Автор
      02.11.2024 16:34

      Согласен, но это только первая часть. Это только введение. Я уже пишу код для следующей статьи. Там уже будет полноценный геймплей и графика. Так же будут скриншоты с игрой.


      1. JerryI
        02.11.2024 16:34

        Смысл бить тогда на части? Это ж не "пост"


        1. TheScienceVictor200 Автор
          02.11.2024 16:34

          Я не могу прям сразу написать код всей игры, тем более, что я слишком медленно нажимаю на клавиши, а пишу код своими руками. Там будет очень большой набор возможностей, десяток видов блоков, редактор уровней и т.д. а за день-два я написать всё не могу.


          1. Fox_exe
            02.11.2024 16:34

            Когда вы пишите "Делаем игру" - пишите про создание игры, а не про азы TKinter. Статья из 3х абзацев - это не статья, а какая-то заметка для GitHub Gists...


          1. dev_KoT
            02.11.2024 16:34

            У вас что, какой-то дедлайн? Что мешает просто дописать полноценный вводный курс, хоть и на это уйдет больше времени?


          1. JerryI
            02.11.2024 16:34

            Вот когда это все сделаете или здоровую часть от этого - пишите. Хабр это немного не про «мой личный блог». У читателей не 10 секундная память и Ваш «курс» не станет неактуальным через неделю, смысл чет торопиться, выдавать по грошу


      1. KaminskyIlya
        02.11.2024 16:34

        90% игры - это контент : графика сюжет музыкальное оформление. вас нужен не питон , а blender, substant painter, corel, Photoshop, и почие инструменты. Вера в то, что выбрав хайповый язык Вы сразу превратитесь в игродела... хм... был бы у меня falcon9 я бы стал космонавтом. но увы


  1. TheScienceVictor200 Автор
    02.11.2024 16:34

    Спойлер следующей части

    Это не всё, что там будет.


    1. UghBugs04
      02.11.2024 16:34

      Чё-то как-то слишком круто разделил. Можно ещё каждый шаг на посты разделить. Добавил библиотеку - пост. Написал первую переменную - пост. Навёл мышку на закрыть окно - пост.


  1. Konstantin_pro_java
    02.11.2024 16:34

    Я думаю, что mainloop лучше не использовать, а цикл создавать вручную. Ведь скорее всего у вас в игре будут объекты, изменение которых не зависит от внешних событий. Их вы как будете обрабатывать?