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í zGtk.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ódouon_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é!