Bii o ṣe Ṣẹda Awọn ohun elo GUI Labẹ Ojú-iṣẹ Linux Lilo PyGObject - Apá 1


Ṣiṣẹda awọn ohun elo lori Lainos le ṣee ṣe ni lilo awọn ọna oriṣiriṣi, ṣugbọn awọn ọna to lopin ti ṣiṣe, nitorinaa lilo awọn ede siseto ti o rọrun julọ ati iṣẹ-ikawe, iyẹn ni idi ti a yoo fi wo iyara nipa ṣiṣẹda awọn ohun elo labẹ Linux deskitọpu nipa lilo ikawe GTK + pẹlu ede siseto Python eyiti a pe ni\"PyGObject".

PyGObject nlo Introspection GObject lati ṣẹda abuda fun awọn ede siseto bi Python, PyGObject ni iran ti nbọ lati PyGTK, o le sọ pe PyGObject = Python + GTK3.

Loni, a yoo bẹrẹ lẹsẹsẹ kan nipa ṣiṣẹda awọn ohun elo GUI (Ifilelẹ Olumulo Olumulo) labẹ tabili tabili Linux nipa lilo ile-ikawe GTK + ati PyGobject ede, jara yoo bo awọn akọle wọnyi:

Ni akọkọ, o gbọdọ ni diẹ ninu imọ ipilẹ ni Python; Python jẹ igbalode pupọ ati rọrun lati lo ede siseto. O jẹ ọkan ninu awọn ede siseto olokiki julọ ni agbaye, ni lilo Python, iwọ yoo ni anfani lati ṣẹda ọpọlọpọ awọn ohun elo & awọn irinṣẹ nla. O le gba diẹ ninu awọn iṣẹ ọfẹ gẹgẹbi awọn ti o wa ni codeacademy.com tabi o le ka diẹ ninu awọn iwe nipa Python ni:

GTK + jẹ ohun elo irinṣẹ agbelebu-orisun agbelebu lati ṣẹda awọn wiwo olumulo ayaworan fun awọn ohun elo tabili, o ti kọkọ bẹrẹ ni ọdun 1998 bi ohun elo irinṣẹ GUI fun GIMP, nigbamii, o ti lo ni ọpọlọpọ awọn ohun elo miiran ati laipẹ di ọkan ninu awọn ile-ikawe olokiki julọ lati ṣẹda awọn GUI. GTK + ti tu silẹ labẹ iwe-aṣẹ LGPL.

Ṣiṣẹda Awọn ohun elo GUI Labẹ Lainos

Awọn ọna 2 wa fun ṣiṣẹda awọn ohun elo nipa lilo GTK + & Python:

  1. Kikọ ni wiwo ayaworan nipa lilo koodu nikan.
  2. Ṣiṣapẹrẹ wiwo ayaworan nipa lilo eto\" Glade "; eyiti o jẹ irinṣẹ RAD lati ṣe apẹrẹ awọn wiwo GTK + ni rọọrun, Glade ṣe ipilẹ GUI bi faili XML eyiti o le lo pẹlu ede siseto eyikeyi lati kọ GUI, lẹhin tajasita faili GUM ti XML, a yoo ni anfani lati sopọ faili XML pẹlu eto wa lati ṣe awọn iṣẹ ti a fẹ.

A yoo ṣe alaye awọn ọna mejeeji ni kukuru.

Kikọ GUI ni lilo koodu nikan le jẹ lile diẹ fun noob programmer ati ṣiṣe-akoko pupọ, ṣugbọn lilo rẹ, a le ṣẹda awọn GUI ti iṣẹ-ṣiṣe pupọ fun awọn eto wa, diẹ sii ju awọn ti a ṣẹda nipa lilo diẹ ninu awọn irinṣẹ bii Glade.

Jẹ ki a gba apẹẹrẹ atẹle.

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

Daakọ koodu ti o wa loke, lẹẹ mọ ni faili\" test.py " ki o ṣeto igbanilaaye 755 lori faili test.py ki o ṣiṣẹ faili naa nigbamii nipa lilo\" ./test.py ”, iyẹn ni iwọ yoo gba.

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

Nipa titẹ bọtini naa, o wo gbolohun\" Kaabo, Agbaye! " ti a tẹ jade ni ebute naa:

Jẹ ki n ṣalaye koodu ni alaye alaye.

  1. #!/usr/bin/python : Ọna aiyipada fun onitumọ Python (ẹya 2.7 ni ọpọlọpọ awọn ọrọ), laini yii gbọdọ jẹ laini akọkọ ni gbogbo faili Python.
  2. # - * - ifaminsi: utf-8 - * - : Nibi a ṣeto ifaminsi aiyipada fun faili naa, UTF-8 ni o dara julọ ti o ba fẹ ṣe atilẹyin awọn ede ti kii ṣe Gẹẹsi, lọ kuro o fẹran rẹ.
  3. lati gi.repository import Gtk : Nibi a n gbe iwe-ikawe GTK 3 wọle lati lo ninu eto wa.
  4. Kilasi ourwindow (Gtk.Window): Nibi a n ṣẹda kilasi tuntun kan, eyiti a pe ni\"ourwindow", a tun n ṣeto iru nkan nkan kilasi si\"Gtk.Window".
  5. def __init __ (self) : Ko si nkan tuntun, a n ṣalaye awọn paati window akọkọ nibi.
  6. Gtk.Window .__ init __ (self, title = ”My Hello World Programme”) : A n lo laini yii lati ṣeto akọle ““ My Hello World Programme ”si \“ ourwindow ” window, o le yi akọle pada ti o ba fẹ.
  7. Gtk.Window.set_default_size (funrararẹ, 400,325) : Emi ko ro pe laini yii nilo alaye, nibi a n ṣeto iwọn aiyipada ati giga fun window wa.
  8. Gtk.Window.set_position (ara, Gtk.WindowPosition.CENTER) : Lilo laini yii, a yoo ni anfani lati ṣeto ipo aiyipada fun window, ninu ọran yii, a ṣeto si aarin ni lilo paramita\"Gtk.WindowPosition.CENTER”, ti o ba fẹ, o le yi pada si\"Gtk.WindowPosition.MOUSE" lati ṣii window lori ipo ijubolu asin.
  9. button1 = Gtk.Button (“Hello, World!”) : A ṣẹda Gtk.Button tuntun, ati pe a pe ni\"bọtini1", ọrọ aiyipada fun bọtini naa ni\" Kaabo, Agbaye! ”, O le ṣẹda eyikeyi ẹrọ ailorukọ Gtk ti o ba fẹ.
  10. button1.connect (“ti tẹ”, self.whenbutton1_clicked) : Nibi a n sopọ ọna ifihan\"ti a tẹ" pẹlu iṣẹ\"whenbutton1_clicked", ki nigbati o ba tẹ bọtini naa, a ti mu iṣẹ\"whenbutton1_clicked" ṣiṣẹ.
  11. self.add (button1) : Ti a ba fẹ ki awọn ẹrọ ailorukọ Gtk wa han, a ni lati ṣafikun wọn si window aiyipada, laini ti o rọrun yii ṣe afikun ẹrọ ailorukọ\"bọtini1" si ferese naa, o ṣe pataki pupọ lati ṣe eyi.
  12. def whenbutton1_clicked (ara, botini) : Nisisiyi a n ṣalaye iṣẹ\"whenbutton1_clicked" nibi, a n ṣalaye ohun ti yoo ṣẹlẹ nigbati ẹrọ ailorukọ\"ti tẹ,\"(ararẹ, botini)” paramita jẹ pataki lati le sọ pato iru nkan ohun ti obi.
  13. tẹjade “Kaabo, Agbaye!” : Emi ko ni lati ṣalaye diẹ sii nihin.
  14. window = ourwindow() : A ni lati ṣẹda iyipada agbaye tuntun ati ṣeto si kilasi wawindow() ki a le pe ni nigbamii nipa lilo ile-ikawe GTK +.
  15. window.connection (“paarẹ-iṣẹlẹ”, Gtk.main_quit) : Nisisiyi a n ṣopọ ami ifihan\"paarẹ-iṣẹlẹ" pẹlu iṣẹ\"Gtk.main_quit", eyi ni pataki lati le paarẹ gbogbo awọn ẹrọ ailorukọ lẹhin ti a ti pa ferese eto wa ni adaṣe.
  16. window.show_all() : Fifihan window naa.
  17. Gtk.main() : Nṣiṣẹ ni ile-ikawe Gtk.

Iyẹn ni, rọrun kii ṣe? Ati ṣiṣe pupọ ti a ba fẹ ṣẹda diẹ ninu awọn ohun elo nla. Fun alaye diẹ sii nipa ṣiṣẹda awọn wiwo GTK + ni lilo ọna kode-nikan, o le ṣabẹwo si oju opo wẹẹbu iwe aṣẹ osise ni:

Python GTK3 Tutorials

Bii Mo ti sọ ni ibẹrẹ nkan naa, Glade jẹ ọpa ti o rọrun pupọ lati ṣẹda awọn atọkun ti a nilo fun awọn eto wa, o jẹ olokiki pupọ laarin awọn olupilẹṣẹ ati ọpọlọpọ awọn wiwo awọn ohun elo nla ti a ṣẹda ni lilo rẹ. Ọna yii ni a pe ni\"Idagbasoke awọn ohun elo iyara".

O ni lati fi Glade sori ẹrọ lati bẹrẹ lilo rẹ, lori ṣiṣe Debian/Ubuntu/Mint:

$ sudo apt­-get install glade

Lori RedHat/Fedora/CentOS, ṣiṣe:

# yum install glade

Lẹhin ti o gba lati ayelujara ati fi eto sii, ati lẹhin ti o ba ṣiṣẹ, iwọ yoo wo awọn ẹrọ ailorukọ Gtk ti o wa ni apa osi, tẹ lori ẹrọ ailorukọ\" window " lati ṣẹda window tuntun kan.

Iwọ yoo ṣe akiyesi pe a ṣẹda window ofo tuntun kan.

O le ṣafikun diẹ ninu awọn ẹrọ ailorukọ si rẹ, lori bọtini irinṣẹ apa osi, tẹ lori ẹrọ ailorukọ\" ati ki o tẹ lori window ti o ṣofo lati le fikun bọtini naa si window naa.

Iwọ yoo ṣe akiyesi pe ID bọtini ni\" button1 ", bayi tọka si Awọn ami Awọn ifihan agbara ninu ọpa irinṣẹ ti o tọ, ki o wa fun ifihan\" ti a tẹ " ki o tẹ sii\" button1_clicked " labẹ rẹ.

Bayi pe a ti ṣẹda GUI wa, jẹ ki a gbe si okeere. Tẹ lori\" Faili " akojọ ki o yan\" Fipamọ ", fi faili naa pamọ sinu itọsọna ile rẹ ni orukọ\" myprogram.glade ”Ati jade.

Bayi, ṣẹda faili tuntun "" test.py ", ki o tẹ koodu atẹle si inu rẹ.

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

Fipamọ faili naa, fun ni awọn igbanilaaye 755 bii ti tẹlẹ, ki o ṣiṣẹ pẹlu lilo\" ./test.py ", ati pe eyi ni ohun ti iwọ yoo gba.

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

Tẹ bọtini naa, iwọ yoo ṣe akiyesi pe gbolohun ọrọ\" Pẹlẹ o, Agbaye! " ti wa ni titẹ ni ebute.

Bayi jẹ ki a ṣalaye awọn nkan tuntun:

  1. olutọju kilasi : Nibi a n ṣẹda kilasi ti a pe ni "" Olutọju "eyi ti yoo pẹlu awọn itumọ fun awọn iṣe & awọn ifihan agbara, a ṣẹda fun GUI.
  2. akọle = Gtk.Builder() : A ṣẹda oniyipada agbaye tuntun ti a pe ni "" akọle "eyiti o jẹ ailorukọ Gtk.Builder, eyi ṣe pataki lati le gbe faili .glade wọle./li>
  3. builder.add_from_file ("myprogram.glade") : Nibi a n gbe faili\"myprogram.glade" wọle lati lo bi GUI aiyipada fun eto wa.
  4. akọle.connect_signals (Olutọju()) : Laini yii ṣopọ faili .glade pẹlu kilasi oluṣakoso, ki awọn iṣe ati awọn ifihan agbara ti a ṣalaye labẹ kilasi\"Olutọju" ṣiṣẹ daradara nigbati a nṣiṣẹ eto naa.
  5. ournewbutton = builder.get_object (“button1”) : Nisisiyi a n gbe ohun-elo\"button1" wọle lati faili .glade, a tun n kọja si oniyipada agbaye\" ourtbutton ”lati lo nigbamii ni eto wa.
  6. ournebutton.set_label (“Hello, World!”) : A lo ọna\"set.label" lati ṣeto ọrọ bọtini aiyipada si\"Kaabo, Agbaye!" gbolohun ọrọ.
  7. window = builder.get_object (“window1”) : Nibi a pe ohun\"window1" lati faili .glade lati fihan ni igbamiiran ninu eto naa.

Ati pe iyẹn ni! O ti ni ifijišẹ ṣẹda eto akọkọ rẹ labẹ Linux!

Nitoribẹẹ awọn nkan idiju pupọ pupọ wa lati ṣe lati ṣẹda ohun elo gidi kan ti o ṣe nkan kan, iyẹn ni idi ti Mo fi gba ọ niyanju lati wo iwe GTK + ati GObject API ni:

    Afowoyi Itọkasi GTK +
  1. Itọkasi API Python GObject
  2. Itọkasi PyGObject

Njẹ o ti dagbasoke eyikeyi elo ṣaaju labẹ tabili Linux? Kini ede siseto ati awọn irinṣẹ ti lo lati ṣe? Kini o ro nipa ṣiṣẹda awọn ohun elo nipa lilo Python & GTK 3?