Ինչպես ստեղծել GUI հավելվածներ Linux-ում՝ օգտագործելով PyGObject


Գրաֆիկական ինտերֆեյսի (GUI) հավելվածների ստեղծումը ձեր գաղափարները կյանքի կոչելու և ձեր ծրագրերն ավելի հարմարավետ դարձնելու ֆանտաստիկ միջոց է:

PyGObject-ը Python գրադարան է, որը ծրագրավորողներին թույլ է տալիս ստեղծել GUI հավելվածներ Linux աշխատասեղանների վրա՝ օգտագործելով GTK (GIMP Toolkit) շրջանակը: GTK-ն լայնորեն օգտագործվում է Linux միջավայրերում՝ սնուցելով աշխատասեղանի շատ հայտնի հավելվածներ, ինչպիսիք են Gedit, GNOME տերմինալը և այլն:

Այս հոդվածում մենք կուսումնասիրենք, թե ինչպես ստեղծել 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]    

Տեղադրվելուց հետո դուք պատրաստ եք սկսել մշակել GUI հավելվածներ՝ օգտագործելով PyGObject և GTK:

Առաջին PyGObject GUI հավելվածի ստեղծում 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()-ի միջոցով և ցուցադրվում է պիտակի մեջ որպես անհատականացված ողջույն:

3. Ձեր հավելվածի ձևավորումը 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-ի աշխատասեղանի վրա GUI հավելվածներ ստեղծելու համար Python-ի միջոցով: Օգտագործելով Python-ի ճկունությունն ու պարզությունը, ինչպես նաև GTK-ի հարուստ հնարավորությունները, մշակողները կարող են ստեղծել գործառույթներով հարուստ և տեսողականորեն գրավիչ հավելվածներ:

Այս ուղեցույցում մենք լուսաբանեցինք PyGObject-ի ստեղծման, պարզ պատուհանի ստեղծման, կոճակի սեղմումների մշակման, օգտվողի մուտքագրման ավելացման և նույնիսկ հատուկ CSS ոճերի կիրառման հիմունքները:

Դուք կարող եք ընդլայնել այս օրինակները՝ ստեղծելու ավելի բարդ հավելվածներ, ինչպիսիք են ֆայլերի կառավարիչները, մեդիա նվագարկիչները կամ նույնիսկ պրոֆեսիոնալ մակարդակի ծրագրակազմը: PyGObject և GTK-ի միջոցով աշխատասեղանի հավելվածներ ստեղծելու հնարավորությունները գրեթե անսահման են: