Ako vytvoriť GUI aplikácie v Linuxe pomocou PyGObject


Vytváranie aplikácií grafického používateľského rozhrania (GUI) je fantastický spôsob, ako oživiť vaše nápady a urobiť vaše programy užívateľsky príjemnejšími.

PyGObject je knižnica jazyka Python, ktorá umožňuje vývojárom vytvárať aplikácie s grafickým rozhraním na desktopoch Linux pomocou rámca GTK (GIMP Toolkit). GTK je široko používaný v prostrediach Linuxu a využíva mnoho populárnych desktopových aplikácií ako Gedit, GNOME terminál a ďalšie.

V tomto článku sa pozrieme na to, ako vytvoriť GUI aplikácie v prostredí Linuxu pomocou PyGObject. Začneme tým, že pochopíme, čo je PyGObject, ako ho nainštalovať, a potom pristúpime k vytvoreniu jednoduchej aplikácie GUI.

Krok 1: Inštalácia Pythonu a GTK v systéme Linux

Ak chcete pracovať s PyGObject, musíte mať nainštalovaný Python a väčšina dnešných distribúcií Linuxu má predinštalovaný Python, ale môžete to potvrdiť spustením:

python3 --version

Python 3.12.3

Ak nie je nainštalovaný Python, môžete ho nainštalovať pomocou nasledujúceho príkazu vhodného pre vašu konkrétnu distribúciu Linuxu.

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]    

Teraz musíte nainštalovať väzby PyGObject pre Python, ako aj vývojové knižnice 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] 

Krok 2: Inštalácia PyGObject v systéme Linux

Po nainštalovaní vývojových knižníc Python a GTK teraz môžete nainštalovať PyGObject pomocou nasledujúceho príkazu vhodného pre vašu konkrétnu distribúciu Linuxu.

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]    

Po inštalácii ste pripravení začať s vývojom GUI aplikácií pomocou PyGObject a GTK.

Vytvorenie prvej PyGObject GUI aplikácie v Linuxe

Teraz zostavme jednoduchú aplikáciu PyGObject, ktorá zobrazí okno s tlačidlom. Po kliknutí na tlačidlo sa zobrazí správa „Ahoj, svet!“.

Vytvorte súbor Python s názvom app.py a začnime písať základnú štruktúru našej aplikácie 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()

Vysvetlenie kódexu:

  • Prvé dva riadky importujú potrebné moduly PyGObject. Zadáme verziu GTK, ktorú chceme použiť (v tomto prípade 3.0).
  • Trieda MyApp dedí z Gtk.Window, ktoré predstavuje hlavné okno aplikácie.
  • Tlačidlo vytvoríme pomocou Gtk.Button a označenie tlačidla je nastavené na „Click Me“. Signál „clicked“ tlačidla tiež prepojíme s metódou on_button_clicked, ktorá po kliknutí vypíše „Hello, World!“.
  • Hlavná slučka aplikácie sa spustí volaním Gtk.main(). Táto slučka čaká na udalosti (napríklad kliknutia) a podľa toho aktualizuje aplikáciu.

Ak chcete spustiť aplikáciu, prejdite do adresára, do ktorého ste uložili súbor app.py, a spustite nasledujúci príkaz:

python3 app.py

Zobrazí sa okno s tlačidlom „Klikni na mňa“. Keď kliknete na tlačidlo, na termináli sa vytlačí „Ahoj, svet!“.

Pridanie ďalších funkcií do vašej aplikácie PyGObject

Teraz rozšírme našu aplikáciu pridaním ďalších miniaplikácií a interaktivity.

1. Pridanie štítku

Našu aplikáciu môžeme vylepšiť pridaním Gtk.Label na zobrazovanie správ v okne namiesto ich tlače v termináli.

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()

Vysvetlenie zmien:

  • Na vertikálne usporiadanie miniaplikácií sme použili Gtk.Box, čo nám pomáha usporiadať štítok a tlačidlo jeden po druhom.
  • Miniaplikácia Gtk.Label je pridaná na zobrazenie správy v okne.
  • Namiesto tlače na terminál teraz funkcia on_button_clicked aktualizuje text štítku.

2. Pridanie vstupných polí pre vstup používateľa

Ďalej pridáme miniaplikácie Gtk.Entry, ktoré umožnia vstup používateľa, čo nám umožní vytvoriť jednoduchú aplikáciu, do ktorej môžu používatelia zadať svoje meno a kliknúť na tlačidlo na zobrazenie prispôsobeného pozdravu.

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()

Vysvetlenie kódexu:

  • Gtk.Entry je vstupné pole, do ktorého môžu používatelia zadať svoje meno.
  • Metóda set_placeholder_text zobrazuje v zadávacom poli nápovedu, kým používateľ niečo nenapíše.
  • Po kliknutí na tlačidlo sa pomocou get_text() načíta zadané meno a zobrazí sa na štítku ako personalizovaný pozdrav.

3. Úprava štýlu vašej aplikácie pomocou CSS

PyGObject vám umožňuje použiť vlastné štýly na widgety vašej aplikácie pomocou súboru CSS s názvom style.css.

window {
    background-color: #f0f0f0;
}

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

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

Teraz upravte kód Pythonu tak, aby načítal a aplikoval tento súbor 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()

Vysvetlenie zmien CSS:

  • Tlačidlo má zelené pozadie a štítky majú vlastnú veľkosť a farbu písma.
  • Okraje tlačidiel sú zaoblené pre moderný vzhľad.

Záver

PyGObject je výkonný nástroj na vytváranie aplikácií GUI na pracovnej ploche Linux pomocou jazyka Python. Využitím flexibility a jednoduchosti Pythonu spolu s bohatými funkciami GTK môžu vývojári vytvárať funkčne bohaté a vizuálne príťažlivé aplikácie.

V tejto príručke sme sa zaoberali základmi nastavenia PyGObject, vytváraním jednoduchého okna, manipuláciou s kliknutiami na tlačidlá, pridávaním používateľských vstupov a dokonca aplikovaním vlastných štýlov CSS.

Tieto príklady môžete rozšíriť na vytváranie komplexnejších aplikácií, ako sú správcovia súborov, prehrávače médií alebo dokonca softvér na profesionálnej úrovni. S PyGObject a GTK sú možnosti vytvárania desktopových aplikácií takmer neobmedzené!