Kako stvoriti GUI aplikacije na Linux radnoj površini koristeći PyGObject - 1. dio


Stvaranje aplikacija na Linuxu može se izvesti na različite načine, ali postoje ograničeni načini za to, tako da koristite najjednostavnije i najfunkcionalnije programske jezike i biblioteke, zato ćemo se brzo osvrnuti na stvaranje aplikacija pod Linuxom desktop pomoću biblioteke GTK+ s programskim jezikom Python koji se zove “PyGObject”.

PyGObject koristi GObject Introspection za stvaranje povezivanja za programske jezike kao što je Python, PyGObject je sljedeća generacija PyGTK-a, možete reći da je PyGObject=Python + GTK3.

Danas ćemo započeti seriju o stvaranju GUI (Graphical User Interface) aplikacija na radnoj površini Linuxa koristeći GTK+ biblioteku i PyGobject jezik, serija će pokriti sljedeće teme:

O Pythonu

Prije svega, morate imati neka osnovna znanja o Pythonu; Python je vrlo moderan i jednostavan za korištenje programski jezik. To je jedan od najpoznatijih programskih jezika na svijetu, koristeći Python, moći ćete izraditi mnoge izvrsne aplikacije i alate. Možete pohađati neke besplatne tečajeve poput onih na codeacademy.com ili možete pročitati neke knjige o Pythonu na:

O GTK+

GTK+ je open-source alat za više platformi za izradu grafičkih korisničkih sučelja za desktop aplikacije, prvi put je pokrenut 1998. kao GUI alat za GIMP, kasnije je korišten u mnogim drugim aplikacijama i ubrzo je postala jedna od najpoznatijih biblioteka za stvaranje GUI-ja. GTK+ je objavljen pod licencom LGPL.

Stvaranje GUI aplikacija pod Linuxom

Postoje 2 načina za izradu aplikacija koristeći GTK+ i Python:

  1. Pisanje grafičkog sučelja samo pomoću koda.
  2. Dizajniranje grafičkog sučelja pomoću programa “Glade ”; koji je RAD alat za jednostavno dizajniranje GTK+ sučelja, Glade generira GUI kao XML datoteku koja se može koristiti s bilo kojim programskim jezikom za izradu GUI-a, nakon izvoza GUI-jeve XML datoteke, moći ćemo povezati XML datoteku s našim program za obavljanje poslova koje želimo.

Ukratko ćemo objasniti oba načina.

Način samo kodiranja

Pisanje GUI-ja samo pomoću koda može biti malo teško za noob programere i vrlo gubi vrijeme, ali koristeći ga, možemo stvoriti vrlo funkcionalna GUI-ja za naše programe, više od onih koje stvaramo pomoću nekih alata kao što je Glade.

Uzmimo sljedeći primjer.

#!/usr/bin/python
-*- coding: utf-8 -*-

from gi.repository import Gtk

class ourwindow(Gtk.Window):

    def __init__(self):
        Gtk.Window.__init__(self, title="My Hello World Program")
        Gtk.Window.set_default_size(self, 400,325)
        Gtk.Window.set_position(self, Gtk.WindowPosition.CENTER)

        button1 = Gtk.Button("Hello, World!")
        button1.connect("clicked", self.whenbutton1_clicked)

        self.add(button1)
        
    def whenbutton1_clicked(self, button):
      print "Hello, World!"

window = ourwindow()        
window.connect("delete-event", Gtk.main_quit)
window.show_all()
Gtk.main()

Kopirajte gornji kod, zalijepite ga u datoteku “test.py” i postavite dopuštenje 755 na datoteku test.py i pokrenite datoteku kasnije koristeći “./test.py ”, to ćete i dobiti.

nano test.py
chmod 755 test.py
./test.py

Klikom na gumb vidjet ćete rečenicu “Hello, World!” ispisanu na terminalu:

Dopustite mi da objasnim kod u detaljnom objašnjenju.

  1. #!/usr/bin/python: Zadana staza za Python tumač (verzija 2.7 u većini slučajeva), ovaj red mora biti prvi red u svakoj Python datoteci.
  2. # -*- kodiranje: utf-8 -*-: Ovdje postavljamo zadano kodiranje za datoteku, UTF-8 je najbolji ako želite podržati jezike koji nisu engleski, ostavite tako .
  3. iz gi.repository import Gtk: Ovdje uvozimo biblioteku GTK 3 da bismo je koristili u našem programu.
  4. Klasa našprozor(Gtk.Window): Ovdje stvaramo novu klasu, koja se zove “našprozor”, također postavljamo tip objekta klase na “Gtk.Prozor”.
  5. def __init__(self): Ništa novo, ovdje definiramo komponente glavnog prozora.
  6. Gtk.Window.__init__(self, title=”My Hello World Program”): Koristimo ovu liniju za postavljanje naslova “My Hello World Program ” na prozor “ourwindow”, možete promijeniti naslov ako želite.
  7. Gtk.Window.set_default_size(self, 400,325): Mislim da ovaj redak ne treba objašnjenje, ovdje postavljamo zadanu širinu i visinu za naš prozor.
  8. Gtk.Window.set_position(self, Gtk.WindowPosition.CENTER): Koristeći ovu liniju, moći ćemo postaviti zadani položaj za prozor, u ovom slučaju, postavili smo ga u središte pomoću parametra “Gtk.WindowPosition.CENTER ”, ako želite, možete ga promijeniti u “Gtk.WindowPosition.MOUSE ” za otvaranje prozora na poziciji pokazivača miša.
  9. button1=Gtk.Button(“Hello, World!”): Stvorili smo novi Gtk.Button i nazvali smo ga “button1”, zadani tekst za gumb je “Hello, World! ”, možete izraditi bilo koji Gtk widget ako želite.
  10. button1.connect(“clicked”, self.whenbutton1_clicked): Ovdje povezujemo signal “clicked” s radnjom “whenbutton1_clicked”, tako da kada se gumb klikne, radnja “whenbutton1_clicked” je aktiviran.
  11. self.add(button1): Ako želimo da se naši Gtk widgeti pojave, moramo ih dodati zadanom prozoru, ova jednostavna linija dodaje widget “button1 ” u prozor, vrlo je potrebno napravi to.
  12. def whenbutton1_clicked(self, button): Sada definiramo radnju “whenbutton1_clicked” ovdje, definiramo što će se dogoditi kada se klikne widget “button1”, “(self, button) ) ” parametar je važan za specificiranje tipa nadređenog objekta signala.
  13. ispiši "Hello, World!": Ne moram ovdje više objašnjavati.
  14. window=ourwindow(): Moramo stvoriti novu globalnu varijablu i postaviti je na našu klasu window() kako bismo je kasnije mogli pozvati koristeći GTK+ biblioteku.
  15. window.connect(“delete-event”, Gtk.main_quit): Sada povezujemo signal “delete-event ” s radnjom “Gtk.main_quit ”, ovo je važno za brisanje sve widgete nakon što automatski zatvorimo prozor programa.
  16. window.show_all(): Prikazivanje prozora.
  17. Gtk.main(): Pokretanje Gtk biblioteke.

To je to, lako zar ne? I vrlo funkcionalan ako želimo stvoriti neke velike aplikacije. Za više informacija o stvaranju GTK+ sučelja korištenjem načina samo kodiranja, možete posjetiti službenu web stranicu s dokumentacijom na:

Vodiči za Python GTK3

Glade dizajnerski način

Kao što sam rekao na početku članka, Glade je vrlo jednostavan alat za stvaranje sučelja koja su nam potrebna za naše programe, vrlo je poznat među programerima i mnoga sjajna sučelja aplikacija stvorena su pomoću njega. Ovaj način se naziva “brzi razvoj aplikacija”.

Morate instalirati Glade kako biste ga počeli koristiti, na Debian/Ubuntu/Mint pokretanju:

sudo apt­-get install glade

Na RedHat/Fedora/CentOS, pokrenite:

yum install glade

Nakon što preuzmete i instalirate program i nakon što ga pokrenete, vidjet ćete dostupne Gtk widgete na lijevoj strani, kliknite na “window” widget kako biste kreirali novi prozor.

Primijetit ćete da se stvara novi prazan prozor.

Sada mu možete dodati neke widgete, na lijevoj alatnoj traci kliknite na widget “gumb” i kliknite na prazan prozor kako biste dodali gumb u prozor.

Primijetit ćete da je ID gumba “button1”, sada pogledajte karticu Signali na desnoj alatnoj traci i potražite signal “kliknuto” i unesite “button1_clicked ” ispod njega.

Sada kada smo izradili naše GUI, izvezimo ga. Kliknite na izbornik “Datoteka” i odaberite “Spremi”, spremite datoteku u svoj matični direktorij pod imenom “myprogram.glade” i Izlaz.

Sada stvorite novu datoteku “test.py” i u nju unesite sljedeći kod.

#!/usr/bin/python
-*- coding: utf-8 -*-

from gi.repository import Gtk

class Handler:
    def button_1clicked(self, button):
      print "Hello, World!"

builder = Gtk.Builder()
builder.add_from_file("myprogram.glade")
builder.connect_signals(Handler())

ournewbutton = builder.get_object("button1")
ournewbutton.set_label("Hello, World!")

window = builder.get_object("window1")

window.connect("delete-event", Gtk.main_quit)
window.show_all()
Gtk.main()

Spremite datoteku, dajte joj 755 dopuštenja kao prije, i pokrenite je pomoću “./test.py”, i to je ono što ćete dobiti.

nano test.py
chmod 755 test.py
./test.py

Kliknite na gumb i primijetit ćete da je rečenica “Hello, World!” ispisana na terminalu.

Sada objasnimo nove stvari:

  1. Rukovatelj klase: Ovdje stvaramo klasu pod nazivom "Rukovatelj" koja će uključivati definicije za radnje i signale koje stvaramo za GUI.
  2. builder=Gtk.Builder(): Stvorili smo novu globalnu varijablu pod nazivom “builder” koja je Gtk.Builder widget, ovo je važno za uvoz .glade datoteke.
  3. builder.add_from_file(“myprogram.glade”): Ovdje uvozimo datoteku “myprogram.glade” da bismo je koristili kao zadano GUI za naš program.
  4. builder.connect_signals(Handler()): Ovaj redak povezuje datoteku .glade s klasom rukovatelja, tako da radnje i signali koje definiramo pod klasom “Handler” dobro rade kada pokrenemo program .
  5. ournewbutton=builder.get_object(“button1”): Sada uvozimo objekt “button1 ” iz datoteke .glade, također ga prosljeđujemo globalnoj varijabli “ournewbutton ” da ga koristi kasnije u našem programu.
  6. ournewbutton.set_label(“Hello, World!”): Koristili smo metodu “set.label ” za postavljanje zadanog teksta gumba na “Hello, World! " rečenica.
  7. window=builder.get_object(“window1”): Ovdje smo pozvali objekt “window1” iz datoteke .glade kako bismo ga kasnije prikazali u programu.

I to je to! Uspješno ste kreirali svoj prvi program pod Linuxom!

Naravno, ima puno kompliciranijih stvari koje treba učiniti kako bi se stvorila prava aplikacija koja nešto radi, zato vam preporučujem da pogledate GTK+ dokumentaciju i GObject API na:

  1. GTK+ Referentni priručnik
  2. Python GObject API referenca
  3. PyGObject Referenca

Jeste li prije razvijali neku aplikaciju pod Linux radnom površinom? Koji programski jezik i alati su korišteni za to? Što mislite o izradi aplikacija pomoću Pythona i GTK 3?