Otu esi emepụta ngwa GUI n'okpuru desktọpụ Linux Iji PyGObject - Part 1


Ịmepụta ngwa na Linux nwere ike iji ụzọ dị iche iche, ma e nwere ụzọ ole na ole e si eme ya, ya mere site na iji asụsụ na ụlọ akwụkwọ mmemme kachasị mfe na nke na-arụ ọrụ, ọ bụ ya mere anyị ga-eji hụ ngwa ngwa banyere ịmepụta ngwa n'okpuru Linux. desktọpụ na-eji ọba akwụkwọ GTK+ nwere asụsụ mmemme Python nke a na-akpọ \PyGObject.

PyGObject na-eji GObject Introspection mepụta njikọ maka asụsụ mmemme dị ka Python, PyGObject bụ ọgbọ na-abịa site na PyGTK, ị nwere ike ịsị na PyGObject = Python + GTK3.

Taa, anyị ga-amalite usoro gbasara ịmepụta GUI (Graphical User Interface) ngwa n'okpuru Linux desktọọpụ site na iji GTK+ na asụsụ PyGobject, usoro a ga-ekpuchi isiokwu ndị a:

Nke mbụ, ị ga-enwerịrị ihe ọmụma ụfọdụ na Python; Python bụ ihe ọgbara ọhụrụ ma dịkwa mfe iji asụsụ mmemme. Ọ bụ otu n'ime asụsụ mmemme ama ama n'ụwa, na-eji Python, ị ga-enwe ike ịmepụta ọtụtụ ngwa & ngwa. Ị nwere ike ịnweta ụfọdụ nkuzi efu dịka ndị ahụ na codeacademy.com ma ọ bụ ị nwere ike ịgụ ụfọdụ akwụkwọ gbasara Python na:

GTK+ bụ ihe mepere emepe cross-platform Toolkit iji mepụta interfaces onye ọrụ maka ngwa desktọpụ, nke izizi malitere na 1998 dị ka ngwa GUI maka GIMP, emesia, ejiri ya na ọtụtụ ngwa ndị ọzọ. N'oge na-adịghị anya ghọrọ otu n'ime ụlọ akwụkwọ ndị ama ama iji mepụta GUI. A tọhapụrụ GTK+ n'okpuru ikike LGPL.

Ịmepụta ngwa GUI n'okpuru Linux

Enwere ụzọ abụọ maka ịmepụta ngwa site na iji GTK+ & Python:

  1. Iji naanị koodu na-ede ihe eserese eserese.
  2. Ịmepụta interface eserese site na iji mmemme \Glade; nke bụ ngwá ọrụ RAD iji chepụta GTK+ n'ụzọ dị mfe, Glade na-ewepụta GUI dị ka faịlụ XML nke enwere ike iji asụsụ mmemme ọ bụla wuo. GUI, mgbe ebupụsịrị faịlụ XML GUI, anyị ga-enwe ike ijikọ faịlụ XML na mmemme anyị iji rụọ ọrụ anyị chọrọ.

Anyị ga-akọwa ụzọ abụọ ahụ na nkenke.

Ide GUI site na iji koodu naanị nwere ike isiri obere ike maka ndị mmemme noob na igbu oge, mana iji ya, anyị nwere ike ịmepụta GUI na-arụ ọrụ nke ukwuu maka mmemme anyị, karịa ndị anyị na-emepụta site na iji ụfọdụ ngwaọrụ dị ka Glade.

Ka anyị were ihe atụ na-esonụ.

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

Detuo koodu dị n'elu, mado ya na faịlụ \test.py wee tọọ ikike 755 na faịlụ test.py wee mee faịlụ ahụ ma emechaa jiri \./test.py”, nke ahụ bụ ihe ị ga-enweta.

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

Site na ịpị bọtịnụ ahụ, ị ga-ahụ ahịrịokwu \Ndewo, Ụwa! nke ebipụtara na njedebe:

Ka m kọwaa koodu na nkọwa zuru ezu.

  1. #!/usr/bin/python: Ụzọ ndabara maka onye ntụgharị okwu Python (ụdị 2.7 n'ọtụtụ oge), ahịrị a ga-abụrịrị ahịrị mbụ na faịlụ Python ọ bụla.
  2. # -*- koodu: utf-8 -*-: N'ebe a, anyị na-edobe koodu ndabara maka faịlụ ahụ, UTF-8 kacha mma ma ọ bụrụ na ịchọrọ ịkwado asụsụ ndị na-abụghị Bekee, pụọ. ọ dị ka ya.
  3. site na gi.repository import Gtk: Ebe a ka anyị na-ebubata ọba akwụkwọ GTK 3 iji jiri ya na mmemme anyị.
  4. Class ourwindow(Gtk.Window): N'ebe a, anyị na-eke klas ọhụrụ, nke a na-akpọ \window anyị, anyị na-edozikwa ụdị ihe klas ahụ na Gtk.Window.
  5. def __init__(self): Ọ dịghị ihe ọhụrụ, anyị na-akọwapụta ihe ndị bụ isi mpio ebe a.
  6. Gtk.Window.__init__(self, title=“My Hello World Programme”): Anyị na-eji ahịrị a tọọ aha \My Hello World Programme ka ọ bụrụ \window anyị windo, ị nwere ike ịgbanwe aha ma ọ bụrụ na-amasị gị.
  7. Gtk.Window.set_default_size(self, 400,325): Echeghị m na ahịrị a chọrọ nkọwa, ebe a anyị na-edozi obosara na ịdị elu nke ndabara maka windo anyị.
  8. Gtk.Window.set_position(self, Gtk.WindowPosition.CENTER): Iji ahịrị a, anyị ga-enwe ike ịtọ ndabara ọnọdụ maka mpio, na nke a, anyị na-edozi ya. gaa n'etiti site na iji paramita Gtk.WindowPosition.CENTER ma ọ bụrụ na ịchọrọ, ị nwere ike ịgbanwe ya gaa na Gtk.WindowPosition.MOUSE iji mepee windo n'ọnọdụ pointer mouse.
  9. button1 = Gtk.Button(“Ndewo, Ụwa!”): Anyị mepụtara Gtk.Button ọhụrụ, anyị wee kpọọ ya \button1, ederede ndabara maka bọtịnụ ahụ bụ\Ndewo, Ụwa!”, ị nwere ike ịmepụta wijetị Gtk ọ bụla ma ịchọrọ.
  10. bọtịnụ1.connect(pịa, self.whenbutton1_clicked): N'ebe a, anyị na-ejikọta akara \pịa na ọrụ \mgbe bọtịnụ1_clicked, nke mere na mgbe a pịa bọtịnụ, a na-eme ihe omume \mgbe bọtịnụ1_pịa.
  11. self.add(button1): Ọ bụrụ na anyị chọrọ ka wijetị Gtk anyị pụta, anyị ga-etinye ha na mpio ndabara, ahịrị a dị mfe na-agbakwunye wijetị \button1 na mpio ahụ, ọ dị ezigbo mkpa ime nke a.
  12. def whenbutton1_clicked(self, button): Ugbu a, anyị na-akọwa ihe omume \mgbe bọtịnụ1_pịa ebe a, anyị na-akọwa ihe ga-eme ma ọ bụrụ na ịpị bọtịnụ bọtịnụ1, \(onwe, bọtịnụ) oke dị mkpa iji kọwaa ụdị ihe nne na nna.
  13. bipụta “Ndewo, Ụwa!”: Achọghị m ịkọwakwuo ebe a.
  14. window = windo anyị(): Anyị ga-emepụta mgbanwe ọhụrụ zuru ụwa ọnụ wee tọọ ya na klaasị nke windo() ka anyị nwee ike ịkpọ ya ma emechaa jiri ọba akwụkwọ GTK+.
  15. window.connect(delete-event, Gtk.main_quit): Ugbu a, anyị na-ejikọta akara ehichapụ-emenụ na ọrụ \Gtk.main_quit, nke a bụ dị mkpa ka ihichapụ wijetị niile ka anyị mechiri windo mmemme anyị na-akpaghị aka.
  16. window.show_all(): Na-egosi windo.
  17. Gtk.main(): Na-eme ọba akwụkwọ Gtk.

Nke ahụ bụ ya, ọ dị mfe ọ bụghị? Na nnọọ ọtọ ma ọ bụrụ na anyị chọrọ ịmepụta ụfọdụ nnukwu ngwa. Maka ozi ndị ọzọ gbasara ịmepụta oghere GTK+ site na iji koodu naanị, ị nwere ike ịga na webụsaịtị akwụkwọ gọọmentị na:

Nkuzi Python GTK3

Dị ka m kwuru na mmalite nke isiokwu a, Glade bụ ngwá ọrụ dị mfe iji mepụta interfaces anyị chọrọ maka mmemme anyị, ọ bụ ihe a ma ama n'etiti ndị mmepe na ọtụtụ nnukwu ngwa ngwa ejiri ya. Ụzọ a ka a na-akpọ mmepe ngwa ngwa ngwa ngwa.

Ị ga-etinye Glade ka ịmalite iji ya, na Debian/Ubuntu/Mint ọsọ:

$ sudo apt­-get install glade

Na RedHat/Fedora/CentOS, gbaa ọsọ:

# yum install glade

Mgbe ibudatara ma wụnye mmemme ahụ, mgbe ịmechara ya, ị ga-ahụ wijetị Gtk dị n'aka ekpe, pịa wijetị \window iji mepụta windo ọhụrụ.

Ị ga-achọpụta na emepụtara windo efu ọhụrụ.

Ị nwere ike tinye ugbu a ụfọdụ wijetị na ya, n'akụkụ aka ekpe toolbar, pịa wijetị \bọtịnụ, wee pịa na mpio efu ka ịtinye bọtịnụ na mpio ahụ.

Ị ga-achọpụta na bọtịnụ ID bụ \bọtịnụ1, ugbu a rụtụ aka na taabụ Signals dị n'aka nri toolbar, wee chọọ akara ngosi \pịa wee tinye\bọtịnụ1_pịa n'okpuru ya.

Ugbu a anyị mepụtara GUI anyị, ka anyị bupụ ya. Pịa na menu \Faịlụ wee họrọ \Chekwa, chekwaa faịlụ n'ime ndekọ ụlọ gị n'aha \myprogram.glade >” wee pụọ.

Ugbu a, mepụta faịlụ \test.py ọhụrụ, ma tinye koodu a n'ime ya.

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

Chekwaa faịlụ ahụ, nye ya ikike 755 dị ka ọ dị na mbụ, wee jiri \./test.py mee ya, nke ahụ bụkwa ihe ị ga-enweta.

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

Pịa na bọtịnụ ahụ, ị ga-ahụkwa na a na-ebipụta ahịrịokwu \Ndewo, Ụwa! na njedebe.

Ugbu a, ka anyị kọwaa ihe ọhụrụ:

  1. klas Handler: N'ebe a, anyị na-eke otu klas a na-akpọ \Handler nke ga-agụnye nkọwa maka omume na akara, anyị na-emepụta maka GUI.
  2. builder = Gtk.Builder(): Anyị mepụtara mgbanwe ụwa ọhụrụ a na-akpọ \builder nke bụ wijetị Gtk.Builder, nke a dị mkpa iji bubata faịlụ .glade.< /li>
  3. builder.add_from_file(myprogram.glade): N'ebe a, anyị na-ebubata faịlụ \myprogram.glade iji jiri ya dị ka GUI ndabara maka mmemme anyị.
  4. builder.connect_signals(Handler()): Ahịrị a na-ejikọ faịlụ .glade na klaasị onye njikwa, ka omume na akara anyị na-akọwapụta n'okpuru klaasị \Handler na-arụ ọrụ nke ọma mgbe anyị na-eme mmemme.
  5. ournewbutton = builder.get_object(“bọtịnụ1”): Ugbu a, anyị na-ebubata ihe \button1 na faịlụ .glade, anyị na-ebufe ya na mgbanwe ụwa niile\ournewbutton” iji ya emechaa na mmemme anyị.
  6. ournewbutton.set_label(Ndewo, Ụwa!): Anyị na-eji usoro \set.label tọọ ederede bọtịnụ ndabara na \Ndewo, Ụwa! okwu.
  7. window = builder.get_object(window1): N'ebe a, anyị na-akpọ ihe \window1 site na faịlụ .glade iji gosi ya ma emechaa na mmemme.

Ma nke ahụ bụ ya! Ị mepụtala mmemme mbụ gị nke ọma n'okpuru Linux!

N'ezie enwere ọtụtụ ihe ndị gbagwojuru anya ime iji mepụta ngwa ngwa na-eme ihe, ya mere m ji akwado gị ka ị lelee akwụkwọ GTK+ na GObject API na:

  1. Akwụkwọ ntuziaka GTK+
  2. Python GObject API ntụaka
  3. Ntụaka PyGObject

Ị mepụtara ngwa ọ bụla tupu n'okpuru desktọpụ Linux? Kedu asụsụ mmemme na akụrụngwa ejirila mee ya? Kedu ihe ị chere maka ịmepụta ngwa site na iji Python & GTK 3?