Kaip sukurti GUI programas Linux darbalaukyje naudojant PyGObject - 1 dalis


Programas Linux sistemoje galima kurti įvairiais būdais, tačiau yra ribotų būdų, todėl naudodamiesi paprasčiausiomis ir funkcionaliausiomis programavimo kalbomis ir bibliotekomis, mes trumpai apžvelgsime programų kūrimą Linux sistemoje. darbalaukyje, naudojant GTK+ biblioteką su Python programavimo kalba, kuri vadinama „PyGObject“.

PyGObject naudoja GObject Introspection, kad sukurtų programavimo kalbų, pvz., Python, susiejimą. PyGObject yra naujos kartos iš PyGTK, galima sakyti, kad PyGObject=Python + GTK3.

Šiandien pradėsime seriją apie GUI (grafinės vartotojo sąsajos) programų kūrimą Linux darbalaukyje, naudojant GTK+ biblioteką ir PyGobject kalbą. Serija apims šias temas:

Apie Python

Visų pirma, jūs turite turėti tam tikrų pagrindinių Python žinių; Python yra labai moderni ir paprasta naudoti programavimo kalba. Tai viena garsiausių programavimo kalbų pasaulyje, naudodamiesi Python galėsite sukurti daug puikių programų ir įrankių. Galite lankyti keletą nemokamų kursų, pvz., adresu codeacademy.com, arba skaityti knygas apie Python adresu:

Apie GTK+

GTK+ yra atvirojo kodo kelių platformų įrankių rinkinys, skirtas sukurti grafines vartotojo sąsajas darbalaukio programoms. Pirmą kartą jis buvo pradėtas naudoti 1998 m. kaip GUI įrankių rinkinys, skirtas GIMP, vėliau buvo naudojamas daugelyje kitų programų ir netrukus tapo viena garsiausių bibliotekų, kuriančių GUI. GTK+ išleistas pagal LGPL licenciją.

GUI programų kūrimas Linux sistemoje

Yra 2 būdai, kaip kurti programas naudojant GTK+ ir Python:

  1. Grafinės sąsajos rašymas naudojant tik kodą.
  2. Grafinės sąsajos projektavimas naudojant „Glade“ programą; kuri yra RAD įrankis, leidžiantis lengvai kurti GTK+ sąsajas, Glade generuoja GUI kaip XML failą, kurį galima naudoti su bet kuria programavimo kalba kuriant GUI, eksportavę GUI XML failą galėsime susieti XML failą su mūsų programa atlikti norimus darbus.

Trumpai paaiškinsime abu būdus.

Tik kodas

GUI rašymas naudojant tik kodą gali būti šiek tiek sunkus noob programuotojams ir atimti daug laiko, tačiau naudodami jį savo programoms galime sukurti labai funkcionalias grafines sąsajas, daugiau nei tas, kurias sukuriame naudodami kai kuriuos įrankius, pvz., Glade.

Paimkime toliau pateiktą pavyzdį.

#!/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()

Nukopijuokite aukščiau pateiktą kodą, įklijuokite jį į failą test.py ir nustatykite 755 leidimą faile test.py ir paleiskite failą vėliau naudodami ./test.py “, tą ir gausite.

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

Spustelėję mygtuką pamatysite terminale išspausdintą sakinį „Sveikas, pasauli!“:

Leiskite paaiškinti kodą išsamiai.

  1. #!/usr/bin/python: numatytasis Python interpretatoriaus kelias (daugeliu atvejų 2.7 versija), ši eilutė turi būti pirmoji kiekvieno Python failo eilutė.
  2. # -*- kodavimas: utf-8 -*-: čia nustatome numatytąjį failo kodavimą, UTF-8 yra geriausias, jei norite palaikyti ne anglų kalbas, palikite taip .
  3. iš gi.repository import Gtk: mes importuojame GTK 3 biblioteką, kad galėtume ją naudoti savo programoje.
  4. Klasė ourwindow(Gtk.Window): Čia mes kuriame naują klasę, kuri vadinasi "ourwindow", taip pat nustatome klasės objekto tipą į "Gtk.Window".
  5. def __init__(self): nieko naujo, čia apibrėžiame pagrindinio lango komponentus.
  6. Gtk.Window.__init__(self, title="My Hello World Program"): mes naudojame šią eilutę norėdami nustatyti "My Hello World Program" pavadinimą į "ourwindow" langą, galite pakeisti pavadinimas, jei norite.
  7. Gtk.Window.set_default_size(self, 400,325): nemanau, kad šiai eilutei nereikia paaiškinimo, čia mes nustatome numatytąjį savo lango plotį ir aukštį.
  8. Gtk.Window.set_position(self, Gtk.WindowPosition.CENTER): naudodami šią eilutę galėsime nustatyti numatytąją lango padėtį, šiuo atveju nustatysime ją į centrą naudodami parametrą „Gtk.WindowPosition.CENTER“, jei norite, galite pakeisti jį į „Gtk.WindowPosition.MOUSE“, kad atidarytumėte langą pelės žymeklio padėtyje.
  9. button1=Gtk.Button („Sveikas, pasauli!“): sukūrėme naują Gtk.mygtuką ir pavadinome jį „button1“, numatytasis mygtuko tekstas yra „Sveikas, pasauli! “, jei norite, galite sukurti bet kurį Gtk valdiklį.
  10. button1.connect("clicked", self.whenbutton1_clicked): čia mes susiejame signalą "clicked" su veiksmu "whenbutton1_clicked", kad spustelėjus mygtuką, veiksmas "whenbutton1_clicked" yra aktyvuotas.
  11. self.add(button1): jei norime, kad būtų rodomi mūsų Gtk valdikliai, turime juos įtraukti į numatytąjį langą. Ši paprasta eilutė prideda prie lango valdiklį „button1“, labai reikia daryk tai.
  12. def whenbutton1_clicked(self, button): dabar apibrėžiame veiksmą „whenbutton1_clicked“ čia, apibrėžiame, kas nutiks, kai bus spustelėtas „button1“ valdiklis, „(self, button“) )“ parametras yra svarbus norint nurodyti pagrindinio signalo objekto tipą.
  13. išspausdinti „Sveikas, pasauli!“: man nereikia čia daugiau aiškinti.
  14. window=ourwindow(): turime sukurti naują visuotinį kintamąjį ir nustatyti jį į ourwindow() klasę, kad vėliau galėtume jį iškviesti naudodami GTK+ biblioteką.
  15. window.connect("delete-event", Gtk.main_quit): dabar mes sujungiame "delete-event" signalą su veiksmu "Gtk.main_quit", tai svarbu norint ištrinti visus valdiklius, kai automatiškai uždarome programos langą.
  16. window.show_all(): rodomas langas.
  17. Gtk.main(): Gtk bibliotekos paleidimas.

Tai viskas, lengva ar ne? Ir labai funkcionalus, jei norime sukurti didelių programų. Norėdami gauti daugiau informacijos apie GTK+ sąsajų kūrimą naudojant tik kodą, galite apsilankyti oficialioje dokumentacijos svetainėje adresu:

Python GTK3 vadovėliai

Glade dizainerio būdas

Kaip jau sakiau straipsnio pradžioje, „Glade“ yra labai paprastas įrankis, leidžiantis sukurti sąsajas, kurių mums reikia mūsų programoms, ji yra labai populiari tarp kūrėjų ir naudojant ją buvo sukurta daug puikių programų sąsajų. Šis būdas vadinamas „greitu programų kūrimu“.

Norėdami pradėti jį naudoti, turite įdiegti „Glade“ „Debian“/„Ubuntu“/„Mint“ paleidime:

sudo apt­-get install glade

„RedHat“/„Fedora“/„CentOS“ paleiskite:

yum install glade

Atsisiuntę ir įdiegę programą bei ją paleidę, kairėje pamatysite galimus Gtk valdiklius, spustelėkite valdiklį „langas“, kad sukurtumėte naują langą.

Pastebėsite, kad sukuriamas naujas tuščias langas.

Dabar galite prie jo pridėti keletą valdiklių, kairiojoje įrankių juostoje spustelėkite valdiklį „mygtukas “ ir spustelėkite tuščią langą, kad pridėtumėte mygtuką prie lango.

Pastebėsite, kad mygtuko ID yra „button1 “, dabar žr. skirtuką Signalai dešinėje įrankių juostoje ir ieškokite signalo „spustelėta“ ir įveskite „button1_clicked “ po juo.

Dabar, kai sukūrėme savo GUI, eksportuokime ją. Spustelėkite meniu „Failas“ ir pasirinkite „Išsaugoti“, išsaugokite failą savo namų kataloge pavadinimu „manoprograma.glade“ ir išeiti.

Dabar sukurkite naują „test.py“ failą ir įveskite jame šį 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()

Išsaugokite failą, suteikite jam 755 leidimus, kaip anksčiau, ir paleiskite jį naudodami „./test.py“, ir tai gausite.

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

Spustelėkite mygtuką ir pastebėsite, kad terminale atspausdintas sakinys „Sveikas, pasauli!“.

Dabar paaiškinkime naujus dalykus:

  1. Klasės tvarkytojas: čia mes kuriame klasę pavadinimu „Handler“, kuri apims veiksmų ir signalų, kuriuos sukuriame GUI, apibrėžimus.
  2. builder=Gtk.Builder(): sukūrėme naują visuotinį kintamąjį pavadinimu "builder", kuris yra Gtk.Builder valdiklis. Tai svarbu norint importuoti .glade failą.
  3. builder.add_from_file("manoprograma.glade"): mes importuojame failą "myprogram.glade", kad naudotume jį kaip numatytąją programos GUI.
  4. builder.connect_signals(Handler()): ši eilutė sujungia .glade failą su tvarkyklių klase, kad veiksmai ir signalai, kuriuos apibrėžiame klasėje "Handler ", veiktų gerai, kai vykdome programą .
  5. ournewbutton=builder.get_object("button1"): dabar mes importuojame "button1" objektą iš .glade failo, taip pat perduodame jį visuotiniam kintamajam "ournewbutton", kad jį naudotume vėliau mūsų programoje.
  6. ournewbutton.set_label("Sveikas, pasauli!"): naudojome "set.label" metodą, norėdami nustatyti numatytąjį mygtuko tekstą į "Sveikas, pasauli!" “ sakinys.
  7. langas=builder.get_object(“langas1”): čia pavadinome objektą „langas1“ iš .glade failo, kad vėliau būtų rodomas programoje.

Štai ir viskas! Sėkmingai sukūrėte savo pirmąją programą Linux sistemoje!

Žinoma, norint sukurti tikrą programą, kuri kažką daro, reikia padaryti daug sudėtingesnių dalykų, todėl rekomenduoju pasidomėti GTK+ dokumentacija ir GObject API adresu:

  1. GTK+ informacinis vadovas
  2. Python GObject API nuoroda
  3. PyGObject nuoroda

Ar anksčiau sukūrėte kokią nors programą „Linux“ darbalaukyje? Kokia programavimo kalba ir įrankiai buvo naudojami tai padaryti? Ką manote apie programų kūrimą naudojant Python & GTK 3?