Giunsa Paghimo ang mga Aplikasyon sa GUI Ubos sa Linux Desktop Gamit ang PyGObject - Bahin 1


Ang paghimo og mga aplikasyon sa Linux mahimo gamit ang lain-laing mga paagi, apan adunay limitado nga mga paagi sa pagbuhat, mao nga gamit ang pinakasimple ug ang pinaka-functional nga mga pinulongan sa programming ug mga librarya, mao nga kita adunay usa ka dali nga pagtan-aw mahitungod sa paghimo og mga aplikasyon ubos sa Linux. desktop gamit ang GTK+ library nga adunay Python programming language nga gitawag og \PyGObject.

Gigamit sa PyGObject ang GObject Introspection aron makamugna ang pagbugkos alang sa mga programming language sama sa Python, ang PyGObject mao ang sunod nga henerasyon gikan sa PyGTK, mahimo nimong isulti nga PyGObject = Python + GTK3.

Karong adlawa, magsugod kami og serye mahitungod sa pagmugna og GUI (Graphical User Interface) nga mga aplikasyon ubos sa Linux desktop gamit ang GTK+ library ug PyGobject nga pinulongan, ang serye maglakip sa mosunod nga mga topiko:

Una sa tanan, kinahanglan nga adunay pipila ka sukaranan nga kahibalo sa Python; Ang Python kay moderno kaayo ug sayon gamiton nga programming language. Usa kini sa labing inila nga programming language sa kalibutan, gamit ang Python, makahimo ka og daghang nindot nga mga aplikasyon ug mga himan. Mahimo kang mokuha ug pipila ka libre nga mga kurso sama nianang sa codeacademy.com o mahimo nimong basahon ang pipila ka libro bahin sa Python sa:

Ang GTK+ maoy usa ka open-source cross-platform toolkit aron makahimo og mga graphical user interface para sa desktop applications, kini unang gisugdan niadtong 1998 isip GUI toolkit para sa GIMP, sa ulahi, gigamit kini sa daghang uban pang mga aplikasyon ug sa wala madugay nahimong usa sa labing inila nga mga librarya sa paghimo og mga GUI. Gipagawas ang GTK+ ubos sa lisensya sa LGPL.

Paghimo ug GUI Aplikasyon Ubos sa Linux

Adunay 2 nga mga paagi sa paghimo sa mga aplikasyon gamit ang GTK + & Python:

  1. Pagsulat sa graphical interface gamit lang ang code.
  2. Ang pagdesinyo sa graphical interface gamit ang \Glade nga programa; nga mao ang RAD tool sa pagdesinyo sa GTK+ nga mga interface nga dali, si Glade nagmugna sa GUI isip XML file nga magamit sa bisan unsang programming language aron matukod. ang GUI, human ma-export ang XML file sa GUI, mahimo namong i-link ang XML file sa among programa aron mahimo ang mga trabaho nga gusto namo.

Atong isaysay ang duha ka paagi sa mubo.

Ang pagsulat sa GUI gamit ang code mahimong gamay ra nga lisud alang sa noob programmer ug pag-usik sa oras, apan gamit kini, makahimo kita og mga functional nga GUIs alang sa atong mga programa, labaw pa sa atong gibuhat gamit ang pipila ka mga himan sama sa Glade.

Atong tagdon ang mosunod nga pananglitan.

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

Kopyaha ang kodigo sa ibabaw, idikit kini sa usa ka \test.py” nga payl ug ibutang ang 755 permiso sa test.py nga payl ug ipadagan ang payl sa ulahi gamit ang \./test.py, mao kana ang imong makuha.

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

Pinaagi sa pag-klik sa buton, imong makita ang \Hello, World!” nga sentence nga giimprinta sa terminal:

Tugoti ako sa pagpatin-aw sa kodigo sa detalyadong pagpatin-aw.

  1. #!/usr/bin/python: Ang default nga dalan para sa Python interpreter (bersyon 2.7 sa kadaghanang kaso), kini nga linya kinahanglang mao ang unang linya sa matag Python file.
  2. # -*- coding: utf-8 -*-: Dinhi among gibutang ang default coding para sa file, ang UTF-8 mao ang pinakamaayo kung gusto nimong suportahan ang dili English nga mga pinulongan, biyai ingon niana.
  3. gikan sa gi.repository import Gtk: Dinhi among gi-import ang GTK 3 library aron magamit kini sa among programa.
  4. Class ourwindow(Gtk.Window): Dinhi naghimo kami og bag-ong klase, nga gitawag og \ourwindow, among gipahimutang usab ang klase nga object type ngadto sa \Gtk.Window.
  5. def __init__(self): Walay bag-o, among gipasabot ang nag-unang bahin sa bintana dinhi.
  6. Gtk.Window.__init__(self, title=”My Hello World Program”): Gigamit namo kini nga linya para ibutang ang \My Hello World Program nga titulo sa \ourwindow bintana, mahimo nimong usbon ang titulo kung gusto nimo.
  7. Gtk.Window.set_default_size(self, 400,325): Wala ko maghunahuna nga kini nga linya nagkinahanglan og katin-awan, dinhi atong gibutang ang default nga gilapdon ug gitas-on alang sa atong bintana.
  8. Gtk.Window.set_position(self, Gtk.WindowPosition.CENTER): Gamit kini nga linya, mahimo namong itakda ang default nga posisyon para sa bintana, sa kini nga kaso, among gibutang kini sa tunga gamit ang \Gtk.WindowPosition.CENTER” nga parameter, kung gusto nimo, mahimo nimo kini usbon sa \Gtk.WindowPosition.MOUSE” aron maablihan ang bintana sa posisyon sa pointer sa mouse.
  9. button1 = Gtk.Button(“Hello, World!”): Naghimo mi og bag-ong Gtk.Button, ug gitawag namo kini og \button1, ang default text para sa button mao ang\Hello, World!”, mahimo kang maghimo ug bisan unsang Gtk widget kung gusto nimo.
  10. button1.connect(clicked, self.whenbutton1_clicked): Dinhi among gisumpay ang \clicked nga signal sa \whenbutton1_clicked nga aksyon, aron nga kon ang buton ma-click, ang \whenbutton1_clicked nga aksyon gipalihok.
  11. self.add(button1): Kung gusto namo nga makita ang among Gtk widgets, kinahanglan namong idugang kini sa default window, kining yano nga linya magdugang sa \button1 widget sa bintana, gikinahanglan kaayo nga buhaton kini.
  12. def whenbutton1_clicked(self, button): Karon among gipasabot ang \whenbutton1_clicked nga aksyon dinhi, among gipasabot kung unsa ang mahitabo kung ang \button1 nga widget gi-klik, ang \(kaugalingon, butones) importante ang parameter aron matino ang tipo sa butang sa ginikanan nga signal.
  13. imprenta ang “Hello, World!”: Dili na nako kinahanglang ipasabot pa dinhi.
  14. window = ourwindow(): Kinahanglan namong maghimo ug bag-ong global variable ug i-set kini sa amongwindow() class aron matawag namo kini sa ulahi gamit ang GTK+ library.
  15. window.connect(“delete-event”, Gtk.main_quit): Karon among gisumpay ang \delete-event nga signal sa \Gtk.main_quit nga aksyon, kini mao ang importante aron mapapas ang tanang widgets human nato awtomatikong isira ang bintana sa programa.
  16. window.show_all(): Nagpakita sa bintana.
  17. Gtk.main(): Pagpadagan sa Gtk library.

Mao na, sayon di ba? Ug magamit kaayo kung gusto namon nga maghimo pipila ka dagkong mga aplikasyon. Alang sa dugang nga impormasyon bahin sa paghimo sa GTK+ nga mga interface gamit ang code-only nga paagi, mahimo nimong bisitahan ang opisyal nga website sa dokumentasyon sa:

Mga Tutorial sa Python GTK3

Sama sa akong giingon sa sinugdanan sa artikulo, ang Glade usa ka sayon kaayo nga himan sa paghimo sa mga interface nga atong gikinahanglan alang sa atong mga programa, kini bantog kaayo sa mga developers ug daghang dagkong mga interface sa aplikasyon ang gibuhat gamit kini. Kini nga paagi gitawag nga \Pabilis nga pag-uswag sa mga aplikasyon.

Kinahanglan nimo nga i-install ang Glade aron masugdan ang paggamit niini, sa Debian/Ubuntu/Mint run:

$ sudo apt­-get install glade

Sa RedHat/Fedora/CentOS, pagdagan:

# yum install glade

Human nimo i-download ug i-install ang programa, ug human nimo kini mapadagan, imong makita ang anaa nga Gtk widgets sa wala, i-klik ang \window” nga widget aron makahimo og bag-ong bintana.

Mamatikdan nimo nga usa ka bag-ong walay sulod nga bintana ang gihimo.

Mahimo nimong idugang ang pipila ka mga widget niini, sa wala nga toolbar, i-klik ang \button widget, ug i-klik ang walay sulod nga bintana aron madugang ang buton sa bintana.

Mamatikdan nimo nga ang button ID mao ang \button1, karon tan-awa ang Signals tab sa tuo nga toolbar, ug pangitaa ang \gi-click” nga signal ug isulod ang\button1_clicked” ubos niini.

Karon nga nahimo na namo ang among GUI, ato kining i-export. I-klik ang \File” nga menu ug pilia ang \Save, i-save ang file sa imong home directory sa ngalan nga \myprogram.glade” ug paggawas.

Karon, paghimo ug bag-ong \test.py” nga payl, ug isulod ang mosunod nga code sa sulod niini.

#!/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-save ang file, hatagi kini og 755 nga permiso sama kaniadto, ug padagana kini gamit ang \./test.py, ug kana ang imong makuha.

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

I-klik ang buton, ug imong mamatikdan nga ang \Hello, World!” nga sentence giimprinta sa terminal.

Karon atong ipasabut ang bag-ong mga butang:

  1. class Handler: Dinhi naghimo kami og klase nga gitawag og \Handler nga maglakip sa mga kahulugan sa mga aksyon ug signal, among gimugna para sa GUI.
  2. builder = Gtk.Builder(): Naghimo mi og bag-ong global variable nga gitawag og \builder nga usa ka Gtk.Builder widget, importante kini aron ma-import ang .glade file.< /li>
  3. builder.add_from_file(myprogram.glade): Dinhi among gi-import ang \myprogram.glade nga payl aron gamiton kini isip default GUI para sa among program.
  4. builder.connect_signals(Handler()): Kini nga linya nagkonektar sa .glade file sa handler class, aron ang mga aksyon ug signal nga atong gihubit ubos sa \Handler class mulihok pag ayo kung among gipadagan ang programa.
  5. ournewbutton = builder.get_object(button1): Karon among gi-import ang \button1 nga butang gikan sa .glade file, gipasa usab namo kini sa global variable\ournewbutton aron magamit kini sa ulahi sa among programa.
  6. ournewbutton.set_label(“Hello, World!”): Gigamit namo ang \set.label nga paagi aron i-set ang default button nga text sa \Hello, World! sentence.
  7. window = builder.get_object(“window1”): Dinhi among gitawag ang \window1” nga butang gikan sa .glade file aron ipakita kini sa ulahi sa programa.

Ug mao kana! Malampuson nimong nahimo ang imong unang programa ubos sa Linux!

Siyempre adunay daghang mas komplikado nga mga butang nga buhaton aron makahimo usa ka tinuud nga aplikasyon nga adunay usa ka butang, mao nga girekomenda ko ikaw nga susihon ang dokumentasyon sa GTK + ug GObject API sa:

  1. GTK+ Reference Manual
  2. Python GObject API Reference
  3. PyGObject Reference

Nahimo na ba nimo ang bisan unsang aplikasyon kaniadto sa ilawom sa desktop sa Linux? Unsa nga programming language ug mga himan ang gigamit sa pagbuhat niini? Unsa ang imong hunahuna bahin sa paghimo og mga aplikasyon gamit ang Python & GTK 3?