PyGTK 3: mini GUI vodič sa Python + 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 je ta što on ne podučava kako podijeliti program na dijelove ili na nekoliko datoteka, bilo bi dobro da je pokazao primjer kako se to radi s PyGTK 3.

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

Počnimo sa malim primjerom:

Ovdje je kod za pisanje u jednoj datoteci koja se zove 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 "kliknuto je dugme" 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__ == '__glavna__': gui = gui ()

zabat

def on_open_clicked (self, button): ispis "\" Otvoreno \ "kliknuto je dugme"

To je funkcija koja se aktivira u terminalu kada pritisnemo dugme 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 pokrećemo.

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: widgets je program koji unaprijed određuju GUI biblioteke koje koristimo. Na primjer, widget je dugme, 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') ### # dugme za otvaranje #### self.button = Gtk.Button (label = 'Close') #### button close #### self.window.add (self.box) #### okvir se nalazi u prozor nazvan window #### self.box.pack_start (self.button, True, True, 0) ##### dugme se nalazi u polju nazvanom box ### self.window.show_all () ## # prikazujemo cijeli prozor ### gui = gui () ### kreiramo gui objekt ####

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

Fert

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

zatvoren

Za kompajliranje stavljamo u terminal python gui.py

pogledajte sliku.

terminal

Sada možemo vidjeti naš mali program ili novi dodatak stvoren pomoću PyGTK 3 biblioteka

To je jednostavan prozor s dva gumba.

Untitled

Sada program dijelimo na tri dijela, a ja ostavljam kod za tri datoteke.

Prva gui.py datoteka

iz gi.repository import Gtk from delete import uništi iz io import io klasa 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 "\" kliknuto je dugme ""

Treća datoteka Униšte.py

iz gi.repository uvoza Gtk klase uništi: def on_close_clicked (self, button): ispiši "Zatvaranje aplikacije" Gtk.main_quit ()

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

jednostavan

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

python gui.py

Izmjene izvršene na gui.py kodu

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

Vidite da je rečenica

def on_open_clicked (self, button): ispis "\" Otvoreno \ "kliknuto je dugme"

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

Rečenica

def on_close_clicked (self, gumb):

print "Zatvaranje aplikacije"
Gtk.main_quit ()

nalazi se u datoteci Униšte.py

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

S druge strane, Python je stub slobodnog softvera i prilagođen je za rad sa GTK 3.6 /3.8, njegovo ime je PyGTK. Pythonova adaptacija 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đe 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 se izvinjavaju što nisu uradili mini uputstvo za KDE.


Ostavite komentar

Vaša e-mail adresa neće biti objavljena. Obavezna polja su označena sa *

*

*

  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 obavezi.
  5. Pohrana podataka: Baza podataka koju hostuje Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.

  1.   rots87 rekao je

    U kdeu više volim koristiti kdevelop (mislim da se to tako zove) za kreiranje GUI-a, ali još uvijek teško pronalazim procese da se to dogodi x stvar: '(

  2.   st0rmt4il rekao je

    Izvrsno za nas koji koristimo Python: D!

    Pozdrav!

  3.   Pablo rekao je

    Pozdrav, pratim ovu zajednicu već dugo 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 radim 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 nijedan, 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 postoje ljudi koji vole čitati kôd bez ikakvih ukrasa. Izvinjavam se ako je ovo već ovdje komentirano i iz nekog razloga je odbijeno, jer se ne sjećam da sam vidio bilo kakvu raspravu na tu temu.

    1.    marianogaudix rekao je

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

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

      1.    eliotime3000 rekao je

        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 rekao je

          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 rekao je

            Oh žao mi je.

        2.    Pandev92 rekao je

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

          1.    eliotime3000 rekao je

            Nevjerovatna stvar nije naučeno tipkanje, što je potrebno da bi se mogao dobro nositi s GNU Emacs-om i njegovim prečicama na tastaturi. 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.   Carper rekao je

    Vrlo super tutorial. Ali usput, izvorni kod pythona nije kompajliran, on je protumačeni jezik.

    1.    giskard rekao je

      Može se kompajlirati u pseudo kod. Nije stroj jezik već bajtovi koji interpretatoru predstavljaju nešto, ali se proces naziva i kompiliranim. U tom smislu, moguće je reći da je nešto sastavljeno.

  5.   hty rekao je

    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 rekao je

      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 iz MINT-a slažem se s GTK 2.4 to se nije dogodilo.

  6.   Carlos rekao je

    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 rekao je

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

      1.    giskard rekao je

        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 kao uvučeni. To je osobina koju posebno volim. Izbjegavate pisanje ključeva i sličnih stvari.

        1.    Pandev92 rekao je

          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 rekao je

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

          2.    Pandev92 rekao je

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

          3.    giskard rekao je

            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. Sa složenijim, razumije ga samo kompajler. 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 rekao je

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

          5.    Pandev92 rekao je

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

          6.    giskard rekao je

            Ono što sam učinio namjerno sam vam pokazao da je bez uvlačenja, iako se kompajlira, 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: uvlačenje. Lako.
            Ali hej, svi sa svojim ukusom.

          7.    Atheyus rekao je

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

            Ovo se 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 rekao je

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

        1.    giskard rekao je

          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, onda kod izgleda dobro. A0 u hex (160 dec) iako mislim da to može 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 prilikom objavljivanja odgovora (a to bi trebalo biti !!!) Ako ne izađe, nisam ja kriv 😉

          1.    marianogaudix rekao je

            Pogledajte primjere koje Sebastian Pölsterl daje u svom tutorijalu 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 rekao je

            Ja ne znam šta 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 bude dobro uvučeno. 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 unijeli, već ukazuje na manu u sistemu objavljivanja ove stranice. Što, možda, administratori mogu popraviti.
            Kada 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, krivica nije vaša; i u mom neposrednom prethodnom odgovoru ono što sam uradio bio je način da se problem riješi s nivoa korisnik-ko-objavljuje.

          3.    marianogaudix rekao je

            Potpuno ste u pravu, trebao sam otpremiti fotografije umjesto da kopiram kod.
            da pokaže kako su iskazi pravilno poredani u PyGTK 3.

  7.   felipe rekao je

    Za programiranje s pythonom preporučujem upotrebu Eclipse-a s dodatkom PyDev ili Pychar m

  8.   louis rekao je

    Kao što je gore komentirano, upravo zato ne volim python, zbog problema sa uvlačenjem. 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, mi 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 rekao je

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

    1.    hola rekao je

      Hvala na lekciji.

      Pozdrav.