PyGTK 3: mini vadnik GUI s Python + GTK + 3

Naredili bomo majhen program s PyGTK 3.0, ki deluje tudi za PyGTK 3.4. Ta mali GUI vas bo naučil, kako razdeliti program na dve ali več datotek.

Obiščete lahko vadbo Sebastiana Pölsterla o novem PyGTK 3, tukaj je nova vadnica, pustim povezavo:

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

To je Sebastianov blog.

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

Eno kritiziranje te vaje s strani Sebastiana je, da program ne uči, kako razdeliti program na dele ali na več datotek, dobro bi bilo, če bi pokazal primer, kako to storiti s PyGTK 3.

Vsi veliki in zapleteni programi so razdeljeni na veliko datotek in datoteke so celo postavljene v druge imenike, to pomeni, da se nahajajo v različnih mapah.

Začnimo z majhnim primerom:

Tu je koda za pisanje v eno datoteko, imenovano gui.py. Odpremo urejevalnik besedil Gedit ali urejevalnik, ki ga najpogosteje uporabljamo, spodaj kopiramo kodo in jo shranimo kot gui.py

from gi.repository import Gtk class gui (): def on_open_clicked (self, button): print "\" Odprt \ "kliknjen gumb" def on_close_clicked (self, button): print "Zapiranje aplikacije" Gtk.main_quit () def __init__ (self): 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 (label = 'Open') self.button.connect ("kliknil", self.on_open_clicked) self.box.pack_start (self.button, True, True, 0) self.button = Gtk.Button ( label = 'Zapri') self.button.connect ("kliknil", self.on_close_clicked) self.box.pack_start (self.button, True, True, 0) self.window.show_all () Gtk.main () if __name__ == '__main__': gui = gui ()

pediment

def on_open_clicked (self, button): natisni "kliknjen gumb" Odpri \ "

To je funkcija, ki se aktivira v terminalu, ko kliknemo gumb za odpiranje. Signal za njegovo aktiviranje je:

self.button.connect ("kliknil", self.on_open_clicked) def on_close_clicked (self, button): natisni "Zapiranje aplikacije" Gtk.main_quit ()

To je funkcija, ki se aktivira, ko kliknemo gumb za zapiranje.

zaprite program, ki ga izvajamo.

signal za njegovo aktiviranje je

self.button.connect ("kliknil", self.on_close_clicked) iz gi.repository import Gtk ### prikličemo knjižnice PyGTK ### class gui (): ### definicija razreda, imenovana gui, je glavni razred # ##

Izjava o pripomočkih: pripomočki so program, ki ga vnaprej določijo knjižnice GUI, ki jih uporabljamo. Na primer, pripomočki so gumb, okno, polje itd. To so pripomočki, ki jih prijavimo v našem programu.

self.window = Gtk.Window () ### window ### self.box = Gtk.Box () ### box #### self.button = Gtk.Button (label = 'Open') ### # gumb za odpiranje #### self.button = Gtk.Button (label = 'Zapri') #### gumb za zapiranje #### self.window.add (self.box) #### polje je v okno z imenom window #### self.box.pack_start (self.button, True, True, 0) ##### gumb je v polju z imenom box ### self.window.show_all () ## # pokažemo celotno okno ### gui = gui () ### ustvari objekt gui ####

Naš program položimo v mapo, ki se v našem primeru imenuje preprost na namizju

Fert

Odpremo mapo s terminalom, v mojem primeru uporabljam Nemo iz Linux Mint 14.

zaprto

Za prevajanje vstavimo v terminal python gui.py

glej sliko.

terminal

Zdaj lahko vidimo naš majhen program ali nov pripomoček, ustvarjen s knjižnicami PyGTK 3

To je preprosto okno z dvema gumboma.

Brez naslova

Zdaj program razdelimo na tri dele, nato pustim kodo za tri datoteke.

Prva datoteka gui.py

iz gi.repository import Gtk from kill import uniči iz io import io class gui (uniči, io): def __init __ (self): 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 (label = 'Open') self.button.connect ("kliknil", self.on_open_clicked) self.box.pack_start (self.button, True, True, 0) self.button = Gtk.Button (label = 'Zapri') self.button.connect ("kliknil", self.on_close_clicked) self.box.pack_start ( self.button, True, True, 0) self.window.show_all () Gtk.main (), če __name__ == '__main__': gui = gui ()

Druga datoteka io.py

class io: def on_open_clicked (self, button): print "\" kliknjen gumb "Odpri \"

Tretja datoteka uniči.py

iz gi.repository import Gtk class uniči: def on_close_clicked (self, button): natisni "Zapiranje aplikacije" Gtk.main_quit ()

Tri datoteke v našem primeru postavimo v isto mapo, mapa se imenuje preprosto razdeljena.

preprost

Za sestavljanje treh datotek. Odpremo mapo s terminalom in jo preprosto vstavimo nazaj v terminal

python gui.py

Spremembe kode gui.py

od uniči uvozni uniči ### stavek za uvoz naše datoteke kill.py ### od io import io ### stavek za uvoz naše datoteke io.py ### razred gui (uniči, io): #### v razred main dodamo podrazrede uniči in io ####

Vidite, da stavek

def on_open_clicked (self, button): natisni "kliknjen gumb" Odpri \ "

Ni v gui.py, je v datoteki io.py

Stavek

def on_close_clicked (self, gumb):

natisni "Zapiranje aplikacije"
Gtk.main_quit ()

nahaja se v datoteki kill.py

Tako lahko program razdelimo na več datotek, ki se nahajajo v različnih imenikih hkrati.

Po drugi strani pa je Python steber brezplačne programske opreme in je prilagojen za delo s GTK 3.6 /3.8, njegovo ime je PyGTK. Pythonova prilagoditev za KDE se imenuje PyQT.

Python je prilagojen za Mac OS in WINDOWS.

Upam, da vam je bila ta mini vadnica PyGTK3 v pomoč. Lahko dajo vse konstruktivne kritike, ki jih želijo.

Poznam tudi nekaj Gtk 3.4 /3.6 in Vala GTK 3.4 / 3.6.

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

Nazadnje se uporabniki KDE opravičujejo, ker niso naredili mini vadnice za KDE.


Pustite svoj komentar

Vaš e-naslov ne bo objavljen. Obvezna polja so označena z *

*

*

  1. Za podatke odgovoren: Miguel Ángel Gatón
  2. Namen podatkov: Nadzor neželene pošte, upravljanje komentarjev.
  3. Legitimacija: Vaše soglasje
  4. Sporočanje podatkov: Podatki se ne bodo posredovali tretjim osebam, razen po zakonski obveznosti.
  5. Shranjevanje podatkov: Zbirka podatkov, ki jo gosti Occentus Networks (EU)
  6. Pravice: Kadar koli lahko omejite, obnovite in izbrišete svoje podatke.

  1.   Gnilobe87 je dejal

    V kdeju raje uporabljam kdevelop (mislim, da se temu tako reče), da ustvarim grafični uporabniški vmesnik, vendar še vedno težko najdem procese, da bi se to zgodilo x stvar:

  2.   st0rmt4il je dejal

    Super za tiste, ki uporabljamo Python: D!

    Lep pozdrav!

  3.   Paul je dejal

    Pozdravljeni, to skupnost spremljam že dolgo in nisem prepričan, ali prvič komentiram ali pa sem to že počel 😀 (pisanje komentarjev v spletu res nisem navdušen). Stvar je v tem, da to storim, da Elavu in KZKG ^ Gaari pustim predlog kot skrbnika, in mislim, da bi bilo dobro dodati vtičnik za barvanje sintakse zdaj, ko v zadnjem času vidim več objav s kodo v različnih programskih jezikih. Vem, da je vtičnikov kar nekaj, vendar nisem poskusil nobenega, ker nisem uporabnik wordpressa, zato vas prepuščam, da razmislite o izvedljivosti zahteve. Ob tej priložnosti preostale bralce vprašam, kaj si mislijo o tej ideji, ker vem, da obstajajo ljudje, ki kodo raje berejo brez okraskov. Opravičujem se, če je bilo to tukaj že komentirano in je bilo iz neznanega razloga zavrnjeno, saj se ne spomnim, da bi na to temo razpravljali.

    1.    marianogaudix je dejal

      Resnica je, da bi rad imel možnost obarvanja sintakse, da bi poudaril kodo programskih jezikov.
      To bi pomagalo uporabnikom, ki se želijo naučiti programskih jezikov.

      Ampak hej, tudi jaz se počutim s forumom in da lahko skupaj razpravljamo in se učimo.

      1.    eliotime3000 je dejal

        GNU Emacs je bolj udoben, saj morate vsaj izbrati, v katerem preveritelju programskega jezika želite delati (če ne želite večje teže procesorja, uporabite GNU Nano in uživajte v minimalizmu v najboljšem primeru).

        1.    marianogaudix je dejal

          Elio estamos hablando de Worpress . Implementado en el blog Desde Linux. No tiene las funciones para dar color a las letras de los posteos .

          1.    eliotime3000 je dejal

            Oh oprosti.

        2.    pandev92 je dejal

          Naaa emacs je udoben za tiste, ki imajo 84 prstov XD .., običajne ljudi, tekstopisca, sublimno besedilo ali beležnico ++ xd

          1.    eliotime3000 je dejal

            Neverjetno je, da se niste naučili tipkanja, ki je potrebno za dobro obvladovanje GNU Emacs in bližnjic na tipkovnici. Poleg tega grafični uporabniški vmesnik olajša uporabo njegovih menijev (lahko ga uporabljate v sistemu Windows, vendar ni priporočljivo, da to počnete v običajnem načinu, temveč v načinu ukaznega poziva, da win32 ne bo bojkotiral vašega skripta).

  4.   Carper je dejal

    Zelo kul vadnica. Toda mimogrede, izvorna koda pythona ni prevedena, je interpretiran jezik.

    1.    giskard je dejal

      Lahko se prevede v psevdo kodo. Tolmaču ne predstavljajo strojnega jezika, temveč bajti, toda postopek se imenuje tudi prevedeni. V tem smislu lahko rečemo, da je nekaj sestavljeno.

  5.   hty je dejal

    Morda se je bolje naučiti pytgk2, ker je najnovejša različica, ki je na voljo za Windows, 2.24. Serija 3 je opazna zaradi svoje odsotnosti. In slabi jeziki pravijo, da gnome v vsaki novi različici razbije vse apise.

    1.    marianogaudix je dejal

      Programiram model z GTK 3.4 / 3.6 in resnica je, da vam zlomijo potrpljenje in glavo, kodo morate prepisati, zdaj razumem, zakaj se ljudje Linux Mint pritožujejo nad GTK in projektom GNOME.
      Za tiste iz MINT se strinjam z GTK 2.4, to se ni zgodilo.

  6.   Carlos je dejal

    Dobra vadnica in reference.
    Samo podrobnost, odkar je vstavljena koda, so v Pythonu vdolbine obvezne in jih je treba upoštevati v primeru kode.

    Lep pozdrav!

    1.    marianogaudix je dejal

      Ali lahko razložite, iz česa so obvezne identifikacije v Pythonu? Resnično vam povem, tega nisem še nikoli slišal.V forumih PyGTK 2/3 v angleščini sem slabo vajen in ga morda spregledam.

      1.    giskard je dejal

        V Pythonu ne uporabljate tipk, kot v C, ali blokov za začetek / konec, kot v Pascalu, vendar je vse razumljeno z vdolbinami, ki jo daste v kodo. To pomeni, da so bloki prepoznani z vdolbino. To je lastnost, ki mi je še posebej všeč. Izogibate se pisanju tipk in podobnim stvarem.

        1.    pandev92 je dejal

          To mi preprosto ni všeč, zdi se preprostejše, če vstavimo dve majhni tipki ali std :: endl;

          1.    Felipe je dejal

            : p Vaš učitelj programiranja vam bo postavil 0. Ali še huje, odpustili vas bodo z dela. Najpomembneje je, da je koda berljiva z vsem, kar pomeni

          2.    pandev92 je dejal

            konča se z zapiralnimi oklepaji, zaradi česar sem veliko bolj berljiv XD ..

          3.    giskard je dejal

            Resno ???


            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);}

            Vidiš? Brez vdolbin ni dobro razumljen. In to enostavno. Pri bolj zapletenem ga razume le prevajalnik. Stvar je v tem, da ker bi morali kljub vsemu zamikati (da bi ljudje razumeli kodo), zakaj bi bila odveč in uporabljali ločila? Dovolj z vdolbinico in to je to.

          4.    pandev92 je dejal

            Seveda se nič ne razume, ker ne spoštujete pravil dobrega pisanja za program v c / c ++. To, kar ste storili, velja za kar koli, na primer za gnezdenje funkcije znotraj funkcije znotraj druge funkcije, ki je znotraj druge, potem vas želim videti xd, če boste to lahko razumeli.

          5.    pandev92 je dejal

            mimogrede, z dvema izgledoma je ta koda lahko razumljiva xD

          6.    giskard je dejal

            To, kar sem naredil, sem namerno pokazal, da je brez vdolbine, čeprav je sestavljena, izjemno težko razumeti katero koli kodo. Torej imate 2 pravili: zamik in obseg z ločili. Ampak to je odveč. V Pythonu tolmač takšne kode preprosto ne sprejme. In imate samo eno pravilo: zamik. Enostavno
            Ampak hej, vsak s svojim okusom.

          7.    Atej je dejal

            Oba sta dobra, zamaknjena in brez zob, po mojem mnenju imam raje podpičje ali rubin, podobno kot python, vendar zamik ni potreben.

            Tako je bolje razumljeno: P:

            echo 'int main (int argc, char * argv []) {ime_programa = argv [0]; while ((argc> 1) && (argv [1] [0] ==' - ')) {stikalo (argv [ 1] [1]) {primer 'v': podrobno = 1; break; case 'o': out_file = & argv [1] [2]; break; case 'l': line_max = atoi (& argv [1] [2]); break; privzeto: fprintf (stderr, »Slaba možnost % s \ n », argv [1]); uporaba ();} ++ argv; –argc;} if (argc == 1) {do_file (" print.in ");} else {while (argc> 1 ) {do_file (argv [1]); ++ argv; –argc;}} return (0);} '| perl -p -e 's / \ {/ \ {\ n \ t / g; s / \; / \; \ n \ t / g; s / \ t \} / \} / g;'

            Lep pozdrav 😀

      2.    giskard je dejal

        Mislim, da Carlos pomeni, da tam, kjer pride koda, ni nobenih zamikov. To s kopiranjem in lepljenjem preprosto ne bo delovalo. Ne vem, ali oznaka obstaja pri ustvarjanju objave za vnos kode jezika. Dobro bi bilo, če bi ga postavili, če ne obstaja.

        1.    giskard je dejal

          Sem že videl, v čem je težava: oznaka CODE odstrani vse presledke in zavihke (tega ne bi smel storiti !!!) Če pa nanjo vstavite nbsp, je koda videti dobro. A0 v šestnajstiški različici (160 v decembru), čeprav mislim, da je to lahko odvisno od pisave (ne vem). Če se uporablja, potem pride takole:

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

          Da je v mojih testih videti dobro, vendar nimam predogleda, ko objavljam odgovore (in to bi moralo biti !!!) Če se ne izkaže, nisem kriv za to

          1.    marianogaudix je dejal

            Oglejte si primere, ki jih Sebastian Pölsterl navede v svoji vaji PyGTK 3, Sebastian ne postavlja oznak.

            Primer:

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

            si lahko ogledate vse vaje Sebastiana.

          2.    giskard je dejal

            Ne vem, kaj mislite. Hočem reči, da tukaj, v objavah, ni mogoče uporabiti oznake HTML "KODA", tako da bo tisto, kar vnesete kot kodo, dobro razčlenjeno. Če pogledate vire strani, boste na strani, na katero se sklicujete, videli, da ne uporablja KODE, temveč druge ločevalnike HTML.
            Niste v nasprotju s kodo, ki ste jo postavili, temveč opozarjate na napako v sistemu objavljanja tega spletnega mesta. Kar lahko skrbniki popravijo.
            Ko govorim o oznakah, očitno govorim o HTML-ju in ne o Pythonu. V vsakem primeru, če v Python vstavite kodo brez zamikov, preprosto ne bo delovala. Če pride novinec in kopira kodo, kot je prikazana v tej objavi, in jo poskusi zagnati, ne bo uspel. Ker ste novinec, boste morda razočarani. Spet krivda ni vaša; in v mojem neposrednem prejšnjem odgovoru sem dal način za rešitev problema z ravni uporabnik-kdo objavi.

          3.    marianogaudix je dejal

            Popolnoma imaš prav, namesto kopiranja kode bi moral naložiti fotografije.
            pokazati, kako so stavki pravilno razvrščeni v PyGTK 3.

  7.   Felipe je dejal

    Za programiranje s pythonom priporočam uporabo Eclipse z vtičnikom PyDev ali Pychar m

  8.   Louis je dejal

    Kot je navedeno zgoraj, ravno zato zaradi vdolbine ne maram pythona. Kot smo videli, kopiranje in lepljenje ne bo delovalo, kar se ne zgodi pri drugih jezikih, kot so C, Java, PHP itd.

    Pri berljivosti uporabimo olepševalnik kode (npr http://indentcode.net/ ) in pripravljen,

    Grda stvar je popravljena, če pa ni vdolbin in je logika spremenjena, se oglasimo ...

  9.   Carlos je dejal

    Sem nov v PyGTK, ali je mogoče komunicirati s skriptami lupine v tem jeziku?

    1.    Pozdravljeni je dejal

      Hvala za vadnico.

      Lep pozdrav.