PyGTK 3: mini GUI-lernilo kun Python + GTK + 3

Ni kreos malgrandan programon kun PyGTK 3.0, kiu ankaŭ funkcias por PyGTK 3.4. Ĉi tiu eta GUI instruos vin kiel dividi programon en du aŭ pli da dosieroj.

Vi povas viziti la lernilon de Sebastian Pölsterl pri la nova PyGTK 3, jen la nova lernilo, mi lasas la ligon:

http://python-gtk-3-tutorial.readthedocs.org/en/latest/index.html

Jen la blogo de Sebastiano.

http://k-d-w.org/node/88

Unu kritiko de ĉi tiu lernilo fare de Sebastiano estas, ke ĝi ne instruas kiel dividi programon en partojn aŭ en plurajn dosierojn, estus bone se li montrus ekzemplon kiel fari ĝin per PyGTK 3.

Ĉiuj grandaj kaj kompleksaj programoj estas dividitaj en multajn dosierojn kaj la dosieroj eĉ estas metitaj en aliajn dosierujojn, tio estas ili situas en malsamaj dosierujoj.

Ni komencu per la malgranda ekzemplo:

Jen la skriba kodo en unu dosiero nomata gui.py. Ni malfermas la tekstredaktilon Gedit aŭ la plej uzatan redaktilon, ni kopias la kodon sube kaj konservas ĝin kiel gui.py

de gi.repository import Gtk class gui (): def on_open_clicked (self, button): print "\" Open \ "button was clicked" def on_close_clicked (self, button): print "Fermanta aplikaĵo" Gtk.main_quit () def __init__ (memo): self.window = Gtk.Window () self.window.connect ('delete-event', Gtk.main_quit) self.box = Gtk.Box () self.window.add (self.box) mem. butono = Gtk.Button (etikedo = 'Malfermi') self.button.connect ("alklakita", self.on_open_clicked) self.box.pack_start (self.button, Vera, Vera, 0) self.button = Gtk.Button ( label = 'Fermi') self.button.connect ("klakita", self.on_close_clicked) self.box.pack_start (self.button, Vera, Vera, 0) self.window.show_all () Gtk.main () se __name__ == '__ĉefa__': gui = gui ()

frontono

def on_open_clicked (mem, butono): presi "\" Malfermi \ "butonon estis alklakita"

Ĝi estas funkcio, kiu aktiviĝas en la fina stacio, kiam ni alklakas la butonon Malfermi. La signalo por aktivigi ĝin estas:

self.button.connect ("klakita", self.on_open_clicked) def on_close_clicked (self, butono): presu "Ferma aplikaĵo" Gtk.main_quit ()

Ĝi estas funkcio, kiu aktiviĝas kiam ni alklakas la ferman butonon.

fermu la programon, kiun ni funkciigas.

la signalo por ĝin aktivigi estas

self.button.connect ("klakita", self.on_close_clicked) de gi.repository import Gtk ### ni alvokas PyGTK-bibliotekojn ### class gui (): ### klasa difino nomata gui estas la ĉefa klaso # ##

Deklaro de Uzaĵoj: uzaĵoj estas programo antaŭdestinita de la GUI-bibliotekoj, kiujn ni uzas. Ekzemple, fenestraĵoj estas butono, fenestro, skatolo ktp. Ĉi tiuj estas la fenestraĵoj, kiujn ni deklaras en nia programo.

self.window = Gtk.Window () ### fenestro ### self.box = Gtk.Box () ### skatolo #### self.button = Gtk.Button (label = 'Malfermi') ### # malfermi butonon #### self.button = Gtk.Button (label = 'Fermi') #### fermi butonon #### self.window.add (self.box) #### la skatolo estas enhavita en la fenestro nomata fenestro #### self.box.pack_start (self.button, True, True, 0) ##### la butono estas en la skatolo nomata skatolo ### self.window.show_all () ## # ni montras la tutan fenestron ### gui = gui () ### krei gui-objekton ####

Ni lokas nian programon en dosierujo nomata simpla en nia kazo sur la labortablo

fekunda

Ni malfermas la dosierujon kun la fina stacio, en mia kazo mi uzas Nemo de Linukso Mint 14.

fermita

Por kompili ni enmetas la terminalan pitonon gui.py

vidu la bildon.

terminalo

Nun ni povas vidi nian malgrandan programon aŭ novan fenestraĵon kreitan per la bibliotekoj PyGTK 3

Ĝi estas simpla fenestro kun du butonoj.

 

untitled

 

Nun ni dividas la programon en tri partojn, sube mi lasas la kodon de la tri dosieroj.

Unua gui.py-dosiero

de gi.repository import Gtk de detrui importi detrui de io importi io klaso gui (detrui, io): def __init __ (mem): self.window = Gtk.Window () self.window.connect ('delete-event', Gtk .main_quit) self.box = Gtk.Box () self.window.add (self.box) self.button = Gtk.Button (etikedo = 'Malfermi') self.button.connect ("klakita", self.on_open_clicked) self.box.pack_start (self.button, Vera, Vera, 0) self.button = Gtk.Button (etikedo = 'Fermi') self.button.connect ("klakita", self.on_close_clicked) self.box.pack_start ( self.button, Vera, Vera, 0) self.window.show_all () Gtk.main () if __name__ == '__main__': gui = gui ()

Dua io.py-dosiero

klaso io: def on_open_clicked (self, button): print "\" Open \ "button was clicked"

Tria dosiero destroy.py

de gi.repository import Gtk class destroy: def on_close_clicked (self, button): print "Fermanta aplikaĵo" Gtk.main_quit ()

Ni metas la tri dosierojn en la saman dosierujon en nia kazo, la dosierujo nomiĝas simpla dividita.

simpla

Kompili la tri dosierojn. Ni malfermas la dosierujon kun la terminalo kaj simple remetas ĝin en la terminalon

python gui.py

Modifoj faritaj al la gui.py-kodo

from destroy import destroy ### statement to import our file destroy.py ### from io import io ### statement to import our file io.py ### class gui (destroy, io): #### to the class ĉefa ni aldonas la subklasojn detrui kaj io ####

Vi povas vidi, ke la frazo

def on_open_clicked (mem, butono): presi "\" Malfermi \ "butonon estis alklakita"

Ĝi ne estas en gui.py, ĝi estas en la dosiero io.py

Frazo

def on_close_clicked (mem, butono):

presi "Ferma aplikaĵo"
Gtk.main_quit ()

ĝi troviĝas en la dosiero destroy.py

Tiel ni povas dividi programon en multajn dosierojn samtempe en diversaj dosierujoj.

Aliflanke Python estas kolono de libera programaro, kaj ĝi estas adaptita por funkcii kun GTK 3.6 /3.8, ĝia nomo estas PyGTK. La adapto de Python por KDE nomiĝas PyQT.

Python estas adaptita por Mac OS kaj WINDOWS.

Mi esperas, ke ĉi tiu mini-lernilo PyGTK3 helpis vin. Ili povas fari ĉiujn konstruajn kritikojn, kiujn ili volas.

Mi ankaŭ konas iujn Gtk 3.4 /3.6 kaj Vala GTK 3.4 / 3.6.

http://www.youtube.com/watch?v=9ckRn_sx8CE

Laste, uzantoj de KDE pardonpetas, ke ili ne faris mini-lernilon por KDE.


La enhavo de la artikolo aliĝas al niaj principoj de redakcia etiko. Por raporti eraron alklaku Ĉi tie.

33 komentoj, lasu la viajn

Lasu vian komenton

Via retpoŝta adreso ne estos eldonita. Postulita kampojn estas markita per *

*

*

  1. Respondeculo pri la datumoj: Miguel Ángel Gatón
  2. Celo de la datumoj: Kontrola SPAM, administrado de komentoj.
  3. Legitimado: Via konsento
  4. Komunikado de la datumoj: La datumoj ne estos komunikitaj al triaj krom per laŭleĝa devo.
  5. Stokado de datumoj: Datumbazo gastigita de Occentus Networks (EU)
  6. Rajtoj: Iam ajn vi povas limigi, retrovi kaj forigi viajn informojn.

  1.   Putras87 diris

    En kde mi preferas uzi kdevelop (mi pensas, ke tiel oni nomas ĝin) por krei la interfacon facile sed mi tamen malfacile trovas la procezojn por ke ĝi okazu x afero: '(

  2.   st0rmt4il diris

    Bonege por tiuj el ni, kiuj uzas Python: D!

    Dankon!

  3.   Paŭlo diris

    Saluton, mi sekvas ĉi tiun komunumon delonge kaj mi ne tre certas, ĉu ĉi tiu estas la unua fojo, ke mi komentis aŭ mi jam faris ĝin antaŭ 😀 (mi ne tre emas verki komentojn en la retejo). La afero estas, ke mi faras ĝin por lasi sugeston al Elav kaj KZKG ^ Gaara kiel administrantoj, kaj mi pensas, ke estus bona ideo aldoni aldonaĵon por sintaksa kolorigo nun, ke lastatempe mi vidas pli da afiŝoj kun kodo en malsamaj programlingvoj. Mi scias, ke ekzistas sufiĉe multaj aldonaĵoj, sed mi provis neniujn, ĉar mi ne estas wordpress-uzanto, do mi lasas vin pripensi la vivkapablon de la peto. Mi profitas la okazon por demandi la ceterajn legantojn, kion ili pensas pri la ideo, ĉar mi scias, ke estas homoj tie, kiuj preferas legi la kodon sen ia ornamaĵo. Mi pardonpetas se ĉi tio jam estis komentita ĉi tie kaj ial ĝi estis malakceptita, ĉar mi ne memoras vidi iun diskuton pri la temo.

    1.    marianogaudix diris

      La vero estas, ke mi ŝatus havi la eblon kolorigi la sintakson por reliefigi la kodon de la programlingvoj.
      Tio helpus uzantojn, kiuj volas lerni programlingvojn.

      Sed hej, mi ankaŭ komfortas kun la forumo kaj ke ni povas diskuti kaj lerni kune.

      1.    eliotime3000 diris

        GNU Emacs estas pli komforta, ĉar almenaŭ vi devas elekti en kiu programlingva kontrolilo vi volas labori (se vi ne volas pli da pezo por via procesoro, uzu GNU Nano kaj ĝuu minimumismon plej bone).

        1.    marianogaudix diris

          Elio ni parolas pri Worpress. Efektivigita en la blogo El Linukso. Ĝi ne havas la funkciojn por kolorigi la literojn de la afiŝoj.

          1.    eliotime3000 diris

            Ho pardonu.

        2.    pandev92 diris

          Naaa emacs estas komforta por tiuj, kiuj havas 84 fingrojn XD .., normalaj homoj, kunlernanto, sublimeksto aŭ notbloko ++ xd

          1.    eliotime3000 diris

            La neverŝajna afero estas ne lerni tajpadon, kiu necesas por povi bone trakti GNU Emacs kaj ĝiajn klavarajn ŝparvojojn. Krome, ĝia GUI faciligas al vi uzi siajn menuojn (ĝi povas esti uzata en Vindozo, sed ne rekomendas fari ĝin per normala reĝimo sed per komanda akurata reĝimo por ke win32 ne bojkotu vian skripton).

  4.   Carper diris

    Tre mojosa lernilo. Sed cetere, la pitona fontkodo ne estas kompilita, ĝi estas interpretita lingvo.

    1.    giskardo diris

      Ĝi kompileblas al pseŭdokodo. Ne maŝinlingvo sed bitokoj reprezentas ion al la interpretisto, sed la procezo estas nomata kompilita ankaŭ. Tiusence eblas diri, ke io estas kompilita.

  5.   hty diris

    Eble estas pli bone lerni pytgk2 ĉar la plej nova versio disponebla por Vindozo estas 2.24. Serio 3 videblas pro sia foresto. Kaj la malbonaj lingvoj diras, ke gnomo rompas ĉiujn apisojn en ĉiu nova versio.

    1.    marianogaudix diris

      Mi programas maketon kun GTK 3.4 / 3.6 kaj la vero estas, ke ili rompas vian paciencon kaj vian kapon, vi devas reskribi la kodon, nun mi komprenas, kial la Linuksaj Monfaristoj plendas pri GTK kaj la projekto GNOME.
      Al tiuj de MINT mi konsentas kun GTK 2.4 ĉi tio ne okazis.

  6.   Carlos diris

    Bona lernilo kaj referencoj.
    Nur detalo, ĉar kodo estas enmetita, en Python-indentigoj estas devigaj kaj devas esti respektataj en la ekzempla kodo.

    Dankon!

    1.    marianogaudix diris

      Ĉu vi povas klarigi, en kio konsistas la devigaj identigoj en Python? Mi diras al vi la veron, ke mi neniam aŭdis tion. Mi malbone kutimas la forumojn PyGTK 2/3 en la angla kaj eble mi preteratentas ĝin.

      1.    giskardo diris

        En Python vi ne uzas klavojn kiel en C aŭ komenc / finajn blokojn kiel en Paskalo, sed ĉio estas komprenata per la indentaĵo, kiun vi donas al la kodo. Tio estas, la blokoj estas rekonitaj per indentado. Ĝi estas trajto, kiun mi aparte amas. Vi evitas skribi klavojn kaj tiajn aferojn.

        1.    pandev92 diris

          Mi simple ne ŝatas tion, ŝajnas pli simple meti du etajn klavojn aŭ std :: endl;, ol esti vidata se la xd-linio estas bone entabeligita

          1.    felipe diris

            : p Via programa instruisto metos 0 por vi. Aŭ pli malbone, ili eksigos vin de via laboro. Plej gravas, ke la kodo legeblas kun ĉio, kion tio implicas

          2.    pandev92 diris

            finante per fermaj krampoj, ĝi igas min multe pli legebla XD ..

          3.    giskardo diris

            Serioze ???


            int main(int argc, char *argv[]){program_name = argv[0];while ((argc > 1) && (argv[1][0] == '-')) {switch (argv[1][1]) {case 'v':verbose = 1; break;case 'o':out_file = &argv[1][2];break;case 'l':line_max = atoi(&argv[1][2]);break;default:fprintf(stderr,"Bad option %s\n", argv[1]);usage();}++argv;--argc;} if (argc == 1) {do_file("print.in");} else {while (argc > 1) {do_file(argv[1]);++argv;--argc;}}return (0);}

            Vi vidas? Sen deŝovoj ĝi ne estas tre bone komprenata. Kaj tio estas facila. Kun pli kompleksa, nur la kompililo komprenas ĝin. La afero estas, ĉar vi DEVAS indentigi ĉiuokaze (por ke homoj komprenu la kodon) kial vi devus esti superflua kaj uzi apartigilojn? Sufiĉas kun indentaĵo kaj jen.

          4.    pandev92 diris

            Kompreneble, nenio estas komprenata, ĉar vi ne respektas la regulojn pri bona verkado de programo en c / c ++. Kion vi faris validas por io ajn, kiel nestado de funkcio, ene de funkcio ene de alia funkcio en alia, tiam mi volas vidi vin xd se vi kapablas kompreni ĝin.

          5.    pandev92 diris

            cetere, kun du aspektoj, tiu kodo estas facile komprenebla xD

          6.    giskardo diris

            Kion mi faris, mi intence montris al vi, ke sen indentaĵo, kvankam ĝi kompilas, estas ekstreme malfacile kompreni iun ajn kodon. Do vi havas 2 regulojn: Deŝovu kaj ampleksu limigilojn. Sed tio estas superflua. En Python tia kodo simple ne estas akceptita de la interpretisto. Kaj vi havas nur unu regulon: Deŝovo. Facila.
            Sed hej, ĉiuj kun siaj gustoj.

          7.    Atheyus diris

            Ambaŭ estas bonaj, la deŝovitaj kaj la neŝovitaj, laŭ mi mi preferas la punktokomo-stilon aŭ rubenon, similan al pitono sed la deŝovado ne necesas.

            Ĉi tio pli bone kompreniĝas: P:

            echo 'int main (int argc, char * argv []) {programo_nomo = argv [0]; while ((argc> 1) && (argv [1] [0] ==' - ')) {ŝaltilo (argv [ 1] [1]) {kazo 'v': multvorta = 1; rompo; kazo 'o': ekster_dosiero = & argv [1] [2]; rompo; kazo 'l': linio_max = atoi (& argv [1] [2]); rompo; defaŭlte: fprintf (stderr, »Malbona opcio % s \ n », argv [1]); uzo ();} ++ argv; –argc;} if (argc == 1) {fari_dosieron (" print.in ");} else {while (argc> 1 ) {fari_dosieron (argv [1]); ++ argv; –argc;}} return (0);} '| perl -p -e 's / \ {/ \ {\ n \ t / g; s / \; / \; \ n \ t / g; s / \ t \} / \} / g;'

            Salutojn 😀

      2.    giskardo diris

        Mi pensas, ke Karlo signifas, ke tie, kie la kodo aperas, ne ekzistas indentoj. Tio kun kopio kaj algluado simple ne funkcios. Mi ne scias, ĉu la etikedo ekzistas kreinte afiŝon por enigi lingvan kodon. Estus bone se ili metus ĝin se ĝi ne ekzistas.

        1.    giskardo diris

          Mi jam vidis, kio estas la problemo: la CODE-etikedo forigas ĉiujn spacojn kaj langetojn (ĝi ne faru tion !!!) Sed se vi metas nbsp sur ĝin, tiam la kodo aspektas bone. A0 en heksa (160 en dec) kvankam mi pensas, ke ĝi povus dependi de la tiparo (mi ne scias). Se ĝi estas uzata, ĝi aperas tiel:

          def fib(n):
              a, b = 0, 1
              while a < n:
                  print(a)
                  a, b = b, a+b

          Ke en miaj testoj ĝi aspektas bone, sed mi ne havas antaŭrigardon kiam mi afiŝas respondojn (kaj devas esti tio !!!) Se ĝi ne aperas, ne estas mia kulpo

          1.    marianogaudix diris

            Rigardu la ekzemplojn, kiujn Sebastian Pölsterl metas en sian lernilon PyGTK 3, Sebastian ne metas etikedojn.

            Ekzemplo:

            http://python-gtk-3-tutorial.readthedocs.org/en/latest/entry.html#example

            vi povas vidi la tutan lernilon de Sebastiano.

          2.    giskardo diris

            Mi ne scias, kion vi celas. Kion mi diras estas, ke ĉi tie, en la afiŝoj, ne eblas uzi la HTML-etikedon «KODO» por ke tio, kion vi metas kiel kodon kaj ĝi aperu bone indentita. Sur la paĝo, kiun vi aludas, se vi vidas la paĝajn fontojn, vi vidos, ke ĝi ne uzas KODON sed uzas aliajn HTML-limigilojn.
            Ĝi ne kontraŭas la kodon, kiun vi enmetis, sed pli ĝuste atentigas pri difekto en la afiŝa sistemo de ĉi tiu retejo. Kion eble administrantoj povas ripari.
            Kiam mi parolas pri etikedoj, mi evidente parolas pri HTML, ne pri Python. Ĉiukaze, se vi metas kodon sen indentaĵo en Python, ĝi simple ne funkcios. Se novulo venas kaj kopias la kodon kiel ĝi aperas en ĉi tiu afiŝo kaj provas lanĉi ĝin, li malsukcesos. Vi eble frustros vin kiel novulo. Denove la kulpo ne estas via; kaj en mia tuja antaŭa respondo, kion mi faris, estis maniero solvi la problemon de la nivelo de uzanto-afiŝoj.

          3.    marianogaudix diris

            Vi tute pravas, mi devus esti alŝutinta fotojn anstataŭ kopii la kodon.
            por montri kiel deklaroj estas taŭge ordigitaj en PyGTK 3.

  7.   felipe diris

    Por programi per python mi rekomendas uzi Eklipson kun la aldonaĵo PyDev, aŭ Pychar m

  8.   Louis diris

    Kiel supre komentite, ĝuste tial mi ne ŝatas pitonon, pro la indenta demando. Kiel ni vidis, kopii kaj alglui ne funkcios, kio ne okazas kun aliaj lingvoj kiel C, Java, PHP, ktp.

    La legebleco, ni aplikas kodan plibeligilon (kiel http://indentcode.net/ ) kaj preta,

    La malbela estas fiksita, sed se ne ekzistas indentaĵo kaj la logiko ŝanĝiĝas, ni sonas ..

  9.   Carlos diris

    Mi estas nova pri PyGTK, ĉu eblas interagi kun ŝelaj skriptoj en ĉi tiu lingvo?

    1.    Saluton diris

      Dankon pro la lernilo.

      Salutojn.