PyGObject: Руководство по созданию графических приложений на Python в Linux

Создание приложений с графическим интерфейсом (GUI) — это отличный способ воплотить ваши идеи в жизнь и сделать программы более удобными для пользователей.

PyGObject — это библиотека Python, которая позволяет разработчикам создавать GUI-приложения на Linux-десктопах, используя фреймворк GTK (GIMP Toolkit). GTK широко используется в Linux-средах, поддерживая многие популярные настольные приложения, такие как Gedit, GNOME terminal и другие.

В этой статье мы рассмотрим, как создавать GUI-приложения в среде Linux-десктопа с использованием PyGObject. Мы начнем с понимания, что такое PyGObject, как его установить, а затем перейдем к созданию простого GUI-приложения.

Шаг 1: Установка Python и GTK в Linux

Для работы с PyGObject вам нужно иметь установленный Python, и большинство современных дистрибутивов Linux поставляются с предустановленным Python, но вы можете подтвердить это, запустив:

python3 --version

Python 3.12.3

Если Python не установлен, вы можете установить его, используя следующую соответствующую команду для вашего конкретного дистрибутива Linux.

sudo apt install python3       [On Debian, Ubuntu and Mint]
sudo dnf install python3       [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]
sudo apk add python3           [On Alpine Linux]
sudo pacman -S python          [On Arch Linux]
sudo zypper install python3    [On OpenSUSE]    

Теперь вам нужно установить биндинги PyGObject для Python, а также библиотеки для разработки GTK.

sudo apt install python3-gi gir1.2-gtk-3.0    [On Debian, Ubuntu and Mint]
sudo dnf install python3-gobject gtk3         [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]
sudo apk add py3-gobject gtk+3                [On Alpine Linux]
sudo pacman -S python-gobject gtk3            [On Arch Linux]
sudo zypper install python3-gobject gtk3      [On OpenSUSE] 

Крок 2: Установка PyGObject в Linux

После установки Python и библиотек разработки GTK вы можете установить PyGObject, используя соответствующую команду для вашего дистрибутива Linux.

sudo apt install python3-gi           [On Debian, Ubuntu and Mint]
sudo dnf install pygobject3           [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]
sudo apk add py3-gobject              [On Alpine Linux]
sudo pacman -S python-gobject         [On Arch Linux]
sudo zypper install python3-gobject   [On OpenSUSE]    

После установки вы готовы начать разработку графических приложений с использованием PyGObject и GTK.

Создание Первого Приложения GUI на PyGObject в Linux

Теперь давайте создадим простое приложение PyGObject, которое отображает окно с кнопкой. При нажатии на кнопку, будет показано сообщение: “Привет, мир!“.

Создайте файл Python под названием app.py и начнем писать базовую структуру нашего приложения PyGObject.

import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk

class MyApp(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self, title="Hello World App")
        self.set_size_request(300, 100)

        # Creating a button and adding it to the window
        button = Gtk.Button(label="Click Me")
        button.connect("clicked", self.on_button_clicked)
        self.add(button)

    def on_button_clicked(self, widget):
        print("Hello, World!")

# Initialize the application
app = MyApp()
app.connect("destroy", Gtk.main_quit)  # Close the app when window is closed
app.show_all()
Gtk.main()

Объяснение Кода:

  • Первые две строки импортируют необходимые модули PyGObject. Мы указываем версию GTK, которую мы хотим использовать (3.0 в этом случае).
  • Класс MyApp наследуется от Gtk.Window, который представляет главное окно приложения.
  • Мы создаем кнопку с помощью Gtk.Button, и текст кнопки устанавливается в “Нажми меня“. Также мы подключаем сигнал кнопки “clicked” к методу on_button_clicked, который выводит “Привет, мир!”, когда кнопка нажата.
  • Главный цикл приложения запускается с помощью вызова Gtk.main(). Этот цикл ожидает события (например, нажатия) и соответствующим образом обновляет приложение.

Для запуска приложения перейдите в каталог, где вы сохранили файл app.py, и выполните следующую команду:

python3 app.py

Появится окно с кнопкой с надписью “Нажми меня“. После нажатия кнопки в терминале будет выведено “Привет, мир!“.

PyGObject GUI Application

Добавление дополнительных функций в ваше приложение PyGObject

Теперь расширим наше приложение, добавив больше виджетов и интерактивности.

1. Добавление метки

Мы можем улучшить наше приложение, добавив Gtk.Label, чтобы отображать сообщения в окне, а не печатать их в терминале.

import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk

class MyApp(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self, title="Enhanced GUI App")
        self.set_size_request(400, 200)

        # Create a vertical box layout
        vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10)
        self.add(vbox)

        # Create a label
        self.label = Gtk.Label(label="Press the button to see a message")
        vbox.pack_start(self.label, True, True, 0)

        # Create a button
        button = Gtk.Button(label="Click Me")
        button.connect("clicked", self.on_button_clicked)
        vbox.pack_start(button, True, True, 0)

    def on_button_clicked(self, widget):
        self.label.set_text("Hello, World!")

# Initialize the application
app = MyApp()
app.connect("destroy", Gtk.main_quit)
app.show_all()
Gtk.main()

Объяснение изменений:

  • Мы использовали Gtk.Box, чтобы организовать виджеты вертикально, что помогает нам расположить метку и кнопку друг за другом.
  • Виджет Gtk.Label добавлен для отображения сообщения внутри окна.
  • Вместо того, чтобы печатать в терминале, функция on_button_clicked теперь обновляет текст метки.
PyGObject GUI Application with Label

2. Добавление полей ввода для пользовательского ввода

Далее добавим виджеты Gtk.Entry, чтобы пользователи могли вводить данные, что позволит нам создать простое приложение, где пользователи могут ввести свое имя и нажать кнопку, чтобы отобразить персонализированное приветствие.

import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk

class MyApp(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self, title="User Input App")
        self.set_size_request(400, 200)

        # Create a vertical box layout
        vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10)
        self.add(vbox)

        # Create an Entry widget for user input
        self.entry = Gtk.Entry()
        self.entry.set_placeholder_text("Enter your name")
        vbox.pack_start(self.entry, True, True, 0)

        # Create a button
        button = Gtk.Button(label="Submit")
        button.connect("clicked", self.on_button_clicked)
        vbox.pack_start(button, True, True, 0)

        # Create a label to display the greeting
        self.label = Gtk.Label(label="")
        vbox.pack_start(self.label, True, True, 0)

    def on_button_clicked(self, widget):
        name = self.entry.get_text()
        if name:
            self.label.set_text(f"Hello, {name}!")
        else:
            self.label.set_text("Please enter your name.")

# Initialize the application
app = MyApp()
app.connect("destroy", Gtk.main_quit)
app.show_all()
Gtk.main()

Объяснение кода:

  • Gtk.Entry – это поле ввода, где пользователи могут вводить свое имя.
  • Метод set_placeholder_text показывает подсказку внутри поля ввода до тех пор, пока пользователь не начнет что-то вводить.
  • После нажатия кнопки введенное имя извлекается с помощью get_text() и отображается в метке в качестве персонализированного приветствия.
PyGObject GUI Application with User Input

Оформление вашего приложения с использованием CSS

PyGObject позволяет применять пользовательские стили к виджетам вашего приложения с использованием файла CSS, называемого style.css.

window {
    background-color: #f0f0f0;
}

button {
    background-color: #4CAF50;
    color: white;
    border-radius: 5px;
    padding: 10px;
}

label {
    font-size: 16px;
    color: #333;
}

Теперь измените код Python, чтобы загрузить и применить этот файл CSS:

import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, Gdk

class MyApp(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self, title="Styled GUI App")
        self.set_size_request(400, 200)

        # Load CSS
        css_provider = Gtk.CssProvider()
        css_provider.load_from_path("style.css")
        screen = Gdk.Screen.get_default()
        style_context = Gtk.StyleContext()
        style_context.add_provider_for_screen(screen, css_provider, Gtk.STYLE_PROVIDER_PRIORITY_USER)

        # Create a vertical box layout
        vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10)
        self.add(vbox)

        # Create an Entry widget for user input
        self.entry = Gtk.Entry()
        self.entry.set_placeholder_text("Enter your name")
        vbox.pack_start(self.entry, True, True, 0)

        # Create a button
        button = Gtk.Button(label="Submit")
        button.connect("clicked", self.on_button_clicked)
        vbox.pack_start(button, True, True, 0)

        # Create a label to display the greeting
        self.label = Gtk.Label(label="")
        vbox.pack_start(self.label, True, True, 0)

    def on_button_clicked(self, widget):
        name = self.entry.get_text()
        if name:
            self.label.set_text(f"Hello, {name}!")
        else:
            self.label.set_text("Please enter your name.")

# Initialize the application
app = MyApp()
app.connect("destroy", Gtk.main_quit)
app.show_all()
Gtk.main()

Объяснение изменений CSS:

  • Кнопка имеет зеленый фон, а метки имеют пользовательский размер шрифта и цвет.
  • Границы кнопки закруглены для современного вида.
PyGObject GUI Application with CSS Styling
Заключение

PyGObject является мощным инструментом для создания графических приложений на Linux с использованием Python. Используя гибкость и простоту Python в сочетании с богатыми функциями GTK, разработчики могут создавать функционально насыщенные и визуально привлекательные приложения.

В этом руководстве мы покрываем основы настройки PyGObject, создания простого окна, обработки нажатий кнопок, добавления ввода пользователя, а также применения пользовательских стилей CSS.

Вы можете расширить эти примеры для создания более сложных приложений, таких как файловые менеджеры, медиаплееры или даже профессионального программного обеспечения. С PyGObject и GTK возможности создания desktop-приложений почти безграничны!

Source:
https://www.tecmint.com/pygobject-create-python-gui-application-linux/