Создание приложений с графическим интерфейсом (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
Теперь расширим наше приложение, добавив больше виджетов и интерактивности.
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
теперь обновляет текст метки.

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()
и отображается в метке в качестве персонализированного приветствия.

Оформление вашего приложения с использованием 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 является мощным инструментом для создания графических приложений на Linux с использованием Python. Используя гибкость и простоту Python в сочетании с богатыми функциями GTK, разработчики могут создавать функционально насыщенные и визуально привлекательные приложения.
В этом руководстве мы покрываем основы настройки PyGObject, создания простого окна, обработки нажатий кнопок, добавления ввода пользователя, а также применения пользовательских стилей CSS.
Вы можете расширить эти примеры для создания более сложных приложений, таких как файловые менеджеры, медиаплееры или даже профессионального программного обеспечения. С PyGObject и GTK возможности создания desktop-приложений почти безграничны!
Source:
https://www.tecmint.com/pygobject-create-python-gui-application-linux/