PyGTK 3: mini GUI vodič s Pythonom + GTK + 3

Napravit ćemo mali program s PyGTK 3.0 koji također radi za PyGTK 3.4. Ovaj mali GUI naučit će vas kako podijeliti program na dvije ili više datoteka.

Možete posjetiti tutorial Sebastiana Pölsterla o novom PyGTK 3, evo novog vodiča, ostavljam vezu:

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

Ovo je Sebastianov blog.

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

Kritika ovog vodiča od strane Sebastiana jest ta što on ne podučava kako podijeliti program na dijelove ili na nekoliko datoteka, bilo bi dobro da je pokazao primjer kako to učiniti s PyGTK 3.

Svi veliki i složeni programi podijeljeni su u mnoge datoteke, a datoteke se čak smještaju u druge direktorije, odnosno nalaze se u različitim mapama.

Počnimo s malim primjerom:

Ovdje je kod za pisanje u jednoj datoteci koja se naziva gui.py. Otvaramo Gedit uređivač teksta ili uređivač koji najčešće koristimo, kopiramo donji kod i spremamo ga kao gui.py

iz gi.repository import Gtk class gui (): def on_open_clicked (self, button): print "\" Open "kliknut je gumb" def on_close_clicked (self, button): print "Closing application" 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 ("kliknuo", self.on_open_clicked) self.box.pack_start (self.button, True, True, 0) self.button = Gtk.Button ( label = 'Close') self.button.connect ("kliknuo", self.on_close_clicked) self.box.pack_start (self.button, True, True, 0) self.window.show_all () Gtk.main () if __name__ == '__main__': gui = gui ()

Fronton

def on_open_clicked (self, button): ispis "\" Kliknut je gumb "Open"

To je funkcija koja se aktivira u terminalu kada kliknemo gumb za otvaranje. Signal za njegovo aktiviranje je:

self.button.connect ("kliknuo", self.on_open_clicked) def on_close_clicked (self, button): ispis "Zatvaranje aplikacije" Gtk.main_quit ()

To je funkcija koja se aktivira kada kliknemo na gumb za zatvaranje.

zatvorite program koji vodimo.

signal za njegovo aktiviranje je

self.button.connect ("kliknuo", self.on_close_clicked) iz gi.repository import Gtk ### pozivamo PyGTK biblioteke ### class gui (): ### definicija klase zvana gui je glavna klasa # ##

Izjava o widgetima: widgeti su program koji unaprijed određuju GUI knjižnice koje koristimo. Na primjer, widgeti su gumb, prozor, okvir itd. To su dodaci koje deklariramo u našem programu.

self.window = Gtk.Window () ### window ### self.box = Gtk.Box () ### box #### self.button = Gtk.Button (label = 'Open') ### # gumb za otvaranje #### self.button = Gtk.Button (label = 'Close') #### gumb za zatvaranje #### self.window.add (self.box) #### okvir je sadržan u prozor nazvan window #### self.box.pack_start (self.button, True, True, 0) ##### gumb se nalazi u okviru nazvanom box ### self.window.show_all () ## # prikazujemo cijeli prozor ### gui = gui () ### stvorimo gui objekt ####

Naš program smještamo u mapu koja se u našem slučaju naziva jednostavnom na radnoj površini

Fert

Otvaramo mapu s terminalom, u mom slučaju koristim Nemo iz Linuxa Mint 14.

Clos

Za kompajliranje stavljamo u terminal python gui.py

vidi sliku.

terminal

Sada možemo vidjeti naš mali program ili novi widget stvoren s knjižnicama PyGTK 3

To je jednostavan prozor s dva gumba.

Bez naslova

Sada program dijelimo na tri dijela, u nastavku ostavljam kod tri datoteke.

Prva datoteka gui.py

iz gi.repository import Gtk from kill import uništi iz io import io class gui (uništi, 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 ("kliknuo", self.on_open_clicked ) self.box.pack_start (self.button, True, True, 0) self.button = Gtk.Button (label = 'Close') self.button.connect ("kliknuo", self.on_close_clicked) self.box.pack_start (self.button, True, True, 0) self.window.show_all () Gtk.main () ako je __name__ == '__main__': gui = gui ()

Druga datoteka io.py

klasa io: def on_open_clicked (self, button): print "\" Kliknut je gumb "Open"

Treća datoteka Униšte.py

iz gi.repository uvoz Gtk klase uništiti: def on_close_clicked (self, button): ispis "Zatvaranje aplikacije" Gtk.main_quit ()

Tri datoteke smještamo u istu mapu, u našem slučaju mapa se naziva jednostavno podijeljena.

jednostavan

Za sastavljanje tri datoteke. Otvorimo mapu s terminalom i jednostavno je vratimo u terminal

python gui.py

Izmjene na gui.py kodu

from uništi uvoz uništi ### izjava za uvoz naše datoteke kill.py ### iz io import io ### izjava za uvoz naše datoteke io.py ### class gui (uništi, io): #### u klasu glavni dodamo podklase uništiti i io ####

Vidite da je rečenica

def on_open_clicked (self, button): ispis "\" Kliknut je gumb "Open"

Nije u gui.py, nego u datoteci io.py

Rečenica

def on_close_clicked (self, gumb):

ispis "Zatvaranje prijave"
Gtk.main_quit ()

smješteno je u datoteci kill.py

Tako program možemo istovremeno podijeliti na više datoteka smještenih u različitim direktorijima.

S druge strane, Python je stup slobodnog softvera i prilagođen je za rad s GTK 3.6 /3.8, njegovo ime je PyGTK. Pythonova prilagodba za KDE naziva se PyQT.

Python je prilagođen za Mac OS i WINDOWS.

Nadam se da vam je ovaj mini vodič za PyGTK3 bio od pomoći. Oni mogu iznijeti sve konstruktivne kritike koje žele.

Također znam neke Gtk 3.4 /3.6 i Vala GTK 3.4 / 3.6.

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

Na kraju, korisnici KDE-a ispričavaju se što nisu napravili mini vodič za KDE.


Ostavite svoj komentar

Vaša email adresa neće biti objavljen. Obavezna polja su označena s *

*

*

  1. Za podatke odgovoran: Miguel Ángel Gatón
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obvezi.
  5. Pohrana podataka: Baza podataka koju hostira Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.

  1.   Truleži87 dijo

    U kdeu više volim koristiti kdevelop (mislim da se to tako zove) za stvaranje gui-a bez problema, ali još uvijek teško pronalazim procese kako bi se to dogodilo x stvar: '(

  2.   st0rmt4il dijo

    Izvrsno za nas koji koristimo Python: D!

    Pozdrav!

  3.   Pavle dijo

    Pozdrav, pratim ovu zajednicu već duže vrijeme i nisam baš siguran jesam li ovo prvi put da sam komentirao ili sam to već učinio prije 😀 (nisam baš prepun pisanju komentara na webu). Stvar je u tome što to činim kako bih Elavu i KZKG ^ Gaari prepustio prijedlog kao administratorima, i mislim da bi bilo dobro dodati dodatak za bojanje sintakse sada kada u posljednje vrijeme vidim više postova s ​​kodom na različitim programskim jezicima. Znam da postoji dosta dodataka, ali nisam probao niti jedan jer nisam korisnik wordpressa, pa vas ostavljam da razmislite o održivosti zahtjeva. Koristim priliku da ostatak čitatelja pitam što misle o toj ideji, jer znam da vani postoje ljudi koji radije čitaju kôd bez ikakvih ukrasa. Ispričavam se ako je ovo već ovdje komentirano i iz nekog je razloga odbijeno, jer se ne sjećam da sam vidio bilo kakvu raspravu na tu temu.

    1.    marianogaudix dijo

      Istina je da bih želio imati mogućnost bojanja sintakse kako bih istaknuo kôd programskih jezika.
      To bi pomoglo korisnicima koji žele naučiti programske jezike.

      Ali hej, ugodno mi je i s forumom i da možemo razgovarati i učiti zajedno.

      1.    eliotime3000 dijo

        GNU Emacs je ugodniji, jer barem morate odabrati na kojem programu za provjeru programskog jezika želite raditi (ako ne želite veću težinu svog procesora, upotrijebite GNU Nano i uživajte u minimalizmu u najboljem slučaju).

        1.    marianogaudix dijo

          Elio, govorimo o WordPressu. Implementirano na blogu Desde Linux. Nema funkcije bojanja slova postova.

          1.    eliotime3000 dijo

            Oh, žao mi je.

        2.    pandev92 dijo

          Naaa emacs je udoban za one koji imaju 84 prsta XD .., normalne ljude, srodnike s tekstom, sublimetext ili notepad ++ xd

          1.    eliotime3000 dijo

            Nevjerojatna stvar je da niste naučili tipkanje, što je potrebno da biste se mogli dobro nositi s GNU Emacsom i njegovim tipkovničkim prečacima. Uz to, njegov GUI olakšava vam upotrebu njegovih izbornika (može se koristiti u sustavu Windows, ali nije preporučljivo to raditi u normalnom načinu, već u načinu naredbenog retka, tako da win32 ne bojkotira vašu skriptu).

  4.   Zakeralo dijo

    Jako cool tutorial. Ali usput, izvorni kod pythona nije kompiliran, to je protumačeni jezik.

    1.    giskard dijo

      Može se prevesti u pseudo kod. Nije strojni jezik već bajtovi ono što interpretatoru predstavlja nešto, ali se proces naziva i kompiliranim. U tom smislu, moguće je reći da je nešto sastavljeno.

  5.   hty dijo

    Možda je bolje naučiti pytgk2 jer je najnovija verzija dostupna za Windows 2.24. Serija 3 uočljiva je svojim odsustvom. A loši jezici kažu da gnom razbija sve apise u svakoj novoj verziji.

    1.    marianogaudix dijo

      Programiram maketu s GTK 3.4 / 3.6 i istina je da vam slome strpljenje i glavu, morate prepisati kod, sada razumijem zašto se ljudi Linux Mint-a žale na GTK i GNOME projekt.
      Onima MINT-a slažem se s GTK 2.4 to se nije dogodilo.

  6.   Carlos dijo

    Dobar vodič i reference.
    Samo detalj, otkako je stavljen kôd, u Pythonu su uvlačenja obavezna i treba ih poštovati u primjeru koda.

    Pozdrav!

    1.    marianogaudix dijo

      Možete li objasniti od čega se sastoje obvezne identifikacije u Pythonu? Da vam pravo kažem, nikada to nisam čuo. Loše sam navikao na PyGTK 2/3 forume na engleskom i možda to previdim.

      1.    giskard dijo

        U Pythonu ne koristite tipke kao u C niti blokove početak / kraj kao u Pascalu, ali sve se razumije kroz uvlačenje koje dajete kodu. Odnosno, blokovi se prepoznaju uvlačenjem. To je značajka koju posebno volim. Izbjegavate pisanje ključeva i sličnih stvari.

        1.    pandev92 dijo

          Jednostavno mi se to ne sviđa, čini se jednostavnijim staviti dvije male tipke ili std :: endl;, nego ako se vidi je li xd linija dobro tabelirana

          1.    Felipe dijo

            : p Vaš učitelj programiranja će vam postaviti 0. Ili još gore, otpustit će vas s posla. Najvažnije je da je kôd čitljiv sa svime što podrazumijeva

          2.    pandev92 dijo

            završavajući zatvaranjem zagrada, čini me mnogo čitljivijim XD ..

          3.    giskard dijo

            Ozbiljno???


            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š? Bez udubljenja to se ne razumije dobro. A to je lako. Kod složenijeg ga razumije samo sastavljač. Stvar je u tome što, budući da MORATE svejedno uvući crtu (da bi ljudi razumjeli kôd), zašto biste morali biti suvišni i koristiti separatore? Dosta s udubljenjem i to je to.

          4.    pandev92 dijo

            Naravno, ništa se ne razumije, jer ne poštujete pravila dobrog pisanja programa na c / c ++. To što ste učinili vrijedi za bilo što, poput gniježđenja funkcije, unutar funkcije unutar druge funkcije koja je unutar druge, tada vas želim vidjeti xd ako to možete razumjeti.

          5.    pandev92 dijo

            usput, s dva izgleda, taj je kod lako razumljiv xD

          6.    giskard dijo

            Ovo što sam učinio namjerno sam vam pokazao da je bez uvlačenja, iako se sastavlja, izuzetno teško razumjeti bilo koji kod. Dakle, imate 2 pravila: uvući i obuhvatiti graničnicima. Ali to je suvišno. U Pythonu tumač jednostavno ne prihvaća takav kod. I imate samo jedno pravilo: uvlaka. Lako.
            Ali hej, svatko sa svojim ukusom.

          7.    Atej dijo

            I jedno i drugo je dobro, uvučeno i ne uvučeno, po meni više volim stil sa zarezom ili rubin, slično pythonu, ali uvlačenje nije potrebno.

            Ovako se to bolje razumije: P:

            echo 'int main (int argc, char * argv []) {ime_programa = argv [0]; while ((argc> 1) && (argv [1] [0] ==' - ')) {prekidač (argv [ 1] [1]) {slučaj 'v': opširno = 1; break; case 'o': out_file = & argv [1] [2]; break; case 'l': line_max = atoi (& argv [1] [2]); break; zadano: fprintf (stderr, »Loša opcija % s \ n », argv [1]); upotreba ();} ++ 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;'

            Pozdrav 😀

      2.    giskard dijo

        Mislim da Carlos znači da tamo gdje kôd izađe nema udubljenja. To s copy & pasteom jednostavno neće uspjeti. Ne znam postoji li oznaka prilikom izrade posta za unos jezičnog koda. Bilo bi dobro da ga stave ako ne postoji.

        1.    giskard dijo

          Već sam vidio u čemu je problem: Oznaka CODE uklanja sve razmake i kartice (to ne bi smjela činiti !!!) Ali ako na nju stavite nbsp, tada kod izgleda dobro. A0 u hex (160 dec) iako mislim da bi to moglo ovisiti o fontu (ne znam). Ako se koristi, onda izlazi ovako:

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

          Da u mojim testovima izgleda dobro, ali nemam pregled kad objavljujem odgovore (a to bi trebalo biti !!!) Ako ne izađe, nisam ja kriv

          1.    marianogaudix dijo

            Pogledajte primjere koje Sebastian Pölsterl stavlja u svom tutorialu za PyGTK 3, Sebastian ne postavlja etikete.

            Primjer :

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

            možete vidjeti sve Sebastianove upute.

          2.    giskard dijo

            Ne znam što misliš. Ono što kažem je da ovdje, u postovima, nije moguće koristiti HTML oznaku «CODE» tako da ono što stavite kao kôd i bude dobro razvedeno. Ako vidite izvore stranice, na stranici koju upućujete vidjet ćete da ne koristi CODE, već koristi druge HTML graničnike.
            Nije protiv koda koji ste stavili, već ukazujete na manu u sustavu objavljivanja ove stranice. Što, možda, administratori mogu popraviti.
            Kad govorim o oznakama, očito govorim o HTML-u, a ne o Pythonu. U svakom slučaju, ako u Python stavite kôd bez uvlačenja, to jednostavno neće raditi. Ako dođe novak i kopira kôd kakav se pojavljuje u ovom postu i pokuša ga pokrenuti, neće uspjeti. Možda ste frustrirani jer ste novajlija. Opet, krivnja nije vaša; i u mom neposrednom prethodnom odgovoru ono što sam učinio bio je način rješavanja problema s razine korisnik-tko-objavljuje.

          3.    marianogaudix dijo

            Potpuno ste u pravu, trebao sam prenijeti fotografije umjesto da kopiram kod.
            kako bi pokazali kako su iskazi pravilno poredani u PyGTK 3.

  7.   Felipe dijo

    Za programiranje s pythonom preporučujem upotrebu Eclipsea s dodatkom PyDev ili Pychar m

  8.   louis dijo

    Kao što je gore spomenuto, upravo zato ne volim python, zbog udubljenja. Kao što smo vidjeli, kopiranje i lijepljenje neće raditi, što se ne događa s drugim jezicima kao što su C, Java, PHP itd.

    Stvar čitljivosti, primjenjujemo uljepšavanje koda (poput http://indentcode.net/ ) i spreman,

    Ružno je popravljeno, ali ako nema uvlačenja i logika je promijenjena, zvučimo ..

  9.   Carlos dijo

    Novi sam u PyGTK-u, je li moguće komunicirati sa skriptama ljuske na ovom jeziku?

    1.    Bok dijo

      Hvala na lekciji.

      Pozdrav.