PyGTK 3: mini GUI-tutorial med Python + GTK + 3

Vi skal lave et lille program med PyGTK 3.0, der også fungerer for PyGTK 3.4. Denne lille GUI lærer dig, hvordan du opdeler et program i to eller flere filer.

Du kan besøge Sebastian Pölsterls tutorial om den nye PyGTK 3, her er den nye tutorial, jeg forlader linket:

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

Dette er Sebastians blog.

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

En kritik af denne tutorial af Sebastian er, at den ikke lærer, hvordan man opdeler et program i dele eller i flere filer, det ville have været godt, hvis han viste et eksempel på, hvordan man gør det med PyGTK 3.

Alle store og komplekse programmer er opdelt i mange filer, og filerne placeres endda i andre mapper, dvs. de er placeret i forskellige mapper.

Lad os starte med det lille eksempel:

Her er skrivekoden i en enkelt fil kaldet gui.py. Vi åbner Gedit-teksteditoren eller den editor, vi bruger mest, kopier koden nedenfor og gem den som gui.py

fra gi.repository import Gtk klasse gui (): def on_open_clicked (selv, knap): udskriv "\" Åbn \ "knappen blev klikket" def on_close_clicked (selv, knap): print "Lukning af applikation" Gtk.main_quit () def __init__ (selv): self.window = Gtk.Window () self.window.connect ('delete-event', Gtk.main_quit) self.box = Gtk.Box () self.window.add (self.box) self. knap = Gtk.Button (label = 'Åbn') self.button.connect ("klikket", self.on_open_clicked) self.box.pack_start (self.button, True, True, 0) self.button = Gtk.Button ( label = 'Close') self.button.connect ("clicked", self.on_close_clicked) self.box.pack_start (self.button, True, True, 0) self.window.show_all () Gtk.main () if __name__ == '__main__': gui = gui ()

Gavl

def on_open_clicked (selv, knap): Udskriv "\" Åbn \ "knappen blev klikket"

Det er en funktion, der aktiveres i terminalen, når vi klikker på knappen Åbn. Signalet for at aktivere det er:

self.button.connect ("clicked", self.on_open_clicked) def on_close_clicked (self, button): print "Lukning af applikation" Gtk.main_quit ()

Det er en funktion, der aktiveres, når vi klikker på luk-knappen.

luk det program, vi kører.

signalet for at aktivere det er

self.button.connect ("klikket", self.on_close_clicked) fra gi.repository import Gtk ### vi påberåber PyGTK-biblioteker ### klasse gui (): ### klassedefinition kaldet gui er hovedklassen # ##

Erklæring om widgets: en widgets er et program, der er forudbestemt af de GUI-biblioteker, vi bruger. For eksempel er en widgets en knap, et vindue, et felt osv. Dette er de widgets, som vi erklærer i vores program.

self.window = Gtk.Window () ### vindue ### self.box = Gtk.Box () ### boks #### self.button = Gtk.Button (label = 'Åbn') ### # åben knap #### self.button = Gtk.Button (label = 'Luk') #### luk knap #### self.window.add (self.box) #### boksen er indeholdt i vinduet kaldet vindue #### self.box.pack_start (self.button, True, True, 0) ##### knappen er indeholdt i feltet kaldet box ### self.window.show_all () ## # vi viser hele vinduet ### gui = gui () ### opret et gui-objekt ####

Vi placerer vores program i en mappe kaldet enkel i vores tilfælde på skrivebordet

fert

Vi åbner mappen med terminalen, i mit tilfælde bruger jeg Nemo fra Linux Mint 14.

lukket

For at kompilere sætter vi terminalen python gui.py

se billedet.

terminal

Nu kan vi se vores lille program eller nye widget oprettet med PyGTK 3-bibliotekerne

Det er et simpelt vindue med to knapper.

Untitled

Nu deler vi programmet i tre dele, nedenfor giver jeg koden til de tre filer.

Første gui.py-fil

fra gi.repository import Gtk fra ødelægge import ødelægge fra io import io klasse gui (ødelægge, io): def __init __ (selv): 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 ("klikket", self.on_open_clicked) self.box.pack_start (self.button, True, True, 0) self.button = Gtk.Button (label = 'Close') self.button.connect ("klikket", self.on_close_clicked) self.box.pack_start ( self.button, True, True, 0) self.window.show_all () Gtk.main () if __name__ == '__main__': gui = gui ()

Anden io.py-fil

klasse io: def on_open_clicked (selv, knap): Udskriv "\" Åbn \ "knappen blev klikket"

Tredje fil destroy.py

fra gi.repository import Gtk klasse ødelægge: def on_close_clicked (selv, knap): udskriv "Lukning af applikation" Gtk.main_quit ()

Vi placerer de tre filer i den samme mappe i vores tilfælde, mappen kaldes simpel delt.

enkel

At kompilere de tre filer. Vi åbner mappen med terminalen og lægger den simpelthen tilbage i terminalen

python gui.py

Ændringer foretaget på gui.py-koden

fra ødelægge import ødelægge ### erklæring for at importere vores fil ødelægge.py ### fra io import io ### erklæring for at importere vores fil io.py ### klasse gui (ødelægge, io): #### til klassen main vi tilføjer underklasserne ødelægge og io ####

Du kan se, at sætningen

def on_open_clicked (selv, knap): Udskriv "\" Åbn \ "knappen blev klikket"

Det er ikke i gui.py, det er i io.py-filen

Dømme

def on_close_clicked (selv, knap):

udskriv "Luk ansøgning"
Gtk.main_quit ()

det er placeret i filen destroy.py

Således kan vi opdele et program i mange filer placeret i forskellige mapper på samme tid.

På den anden side er Python en søjle af fri software, og den er tilpasset til at arbejde med GTK 3.6 /3.8, dens navn er PyGTK. Pythons tilpasning til KDE kaldes PyQT.

Python er tilpasset Mac OS og WINDOWS.

Jeg håber, at denne PyGTK3 mini-tutorial har været nyttigt for dig. De kan komme med al den konstruktive kritik, de ønsker.

Jeg kender også nogle Gtk 3.4 /3.6 og Vala GTK 3.4 / 3.6.

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

Endelig undskylder KDE-brugere for ikke at have lavet en mini-tutorial til KDE.


Efterlad din kommentar

Din e-mailadresse vil ikke blive offentliggjort. Obligatoriske felter er markeret med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Control SPAM, management af kommentarer.
  3. Legitimering: Dit samtykke
  4. Kommunikation af dataene: Dataene vil ikke blive kommunikeret til tredjemand, undtagen ved juridisk forpligtelse.
  5. Datalagring: Database hostet af Occentus Networks (EU)
  6. Rettigheder: Du kan til enhver tid begrænse, gendanne og slette dine oplysninger.

  1.   rådner87 sagde han

    I kde foretrækker jeg at bruge kdevelop (jeg tror, ​​det hedder det) til at skabe gui med lethed, men jeg har stadig svært ved at finde processerne for at det kan ske x ting: '(

  2.   st0rmt4il sagde han

    Fantastisk for dem af os, der bruger Python: D!

    Greetings!

  3.   Paul sagde han

    Hej, jeg har fulgt dette samfund i lang tid, og jeg er ikke særlig sikker på, om det er første gang, jeg har kommenteret, eller at jeg allerede har gjort det før 😀 (jeg har ikke meget til at skrive kommentarer på nettet virkelig). Sagen er, at jeg gør det for at efterlade et forslag til Elav og KZKG ^ Gaara som administratorer, og jeg synes, det ville være en god ide at tilføje et plugin til syntaksfarvning, nu da jeg for nylig ser flere indlæg med kode på forskellige programmeringssprog. Jeg ved, at der er en hel del plugins, men jeg har ikke prøvet nogen, da jeg ikke er wordpress-bruger, så jeg overlader dig til at tænke over anmodningens levedygtighed. Jeg benytter lejligheden til at spørge resten af ​​læserne, hvad de synes om ideen, fordi jeg ved, at der er mennesker derude, der foretrækker at læse koden uden noget pryd. Jeg undskylder, hvis dette allerede er blevet kommenteret her, og det blev afvist af en eller anden grund, da jeg ikke kan huske at have set nogen diskussion om emnet.

    1.    marianogaudix sagde han

      Sandheden er, at jeg gerne vil have muligheden for at farve syntaksen for at fremhæve koden til programmeringssprogene.
      Det ville hjælpe brugere, der ønsker at lære programmeringssprog.

      Men hej, jeg er også fortrolig med forummet, og at vi kan diskutere og lære sammen.

      1.    eliotime3000 sagde han

        GNU Emacs er mere behagelig, da du i det mindste skal vælge, i hvilken programmeringssprogkontrol du vil arbejde (hvis du ikke vil have mere vægt til din processor, skal du bruge GNU Nano og nyde minimalisme når det er bedst).

        1.    marianogaudix sagde han

          Elio vi taler om WordPress. Implementeret på bloggen Desde Linux. Det har ikke funktionerne til at farve indlæggenes bogstaver.

          1.    eliotime3000 sagde han

            Åh, jeg er ked af det.

        2.    pandev92 sagde han

          Naaa emacs er behageligt for dem, der har 84 fingre XD .., normale mennesker, textmate, sublimetext eller notesblok ++ xd

          1.    eliotime3000 sagde han

            Det usandsynlige er, at du ikke har lært at skrive, hvilket kræves for at være i stand til at håndtere GNU Emacs og dets tastaturgenveje godt. Derudover gør dets GUI det nemt for dig at bruge menuerne (det kan bruges i Windows, men det anbefales ikke at gøre det i normal tilstand, men med kommandopromptilstand, så win32 ikke boykotter dit script).

  4.   Carper sagde han

    Meget sej tutorial. Men forresten er python-kildekoden ikke kompileret, det er et fortolket sprog.

    1.    giskard sagde han

      Det kan kompileres til pseudokode. Det er ikke maskinsprog, men bytes, der repræsenterer noget for tolken, men processen kaldes også kompileret. I denne forstand er det muligt at sige, at noget er kompileret.

  5.   hty sagde han

    Måske er det bedre at lære pytgk2, fordi den seneste tilgængelige version til Windows er 2.24. Serie 3 er iøjnefaldende med sin fravær. Og de dårlige tunger siger, at kabine bryder alle apis i hver ny version.

    1.    marianogaudix sagde han

      Jeg programmerer en mockup med GTK 3.4 / 3.6, og sandheden er, at de bryder din tålmodighed og dit hoved, du skal omskrive koden, nu forstår jeg, hvorfor Linux Mint-folk klager over GTK og GNOME-projektet.
      Til dem fra MINT er jeg enig med GTK 2.4, dette skete ikke.

  6.   Carlos sagde han

    God vejledning og referencer.
    Bare en detalje, da kode er blevet indsat, i Python-fordybninger er obligatoriske og skal respekteres i eksempelkoden.

    Greetings!

    1.    marianogaudix sagde han

      Kan du forklare, hvad de obligatoriske identifikationer i Python består af? Jeg siger sandheden, det har jeg aldrig hørt. Jeg er dårligt vant til PyGTK 2/3 fora på engelsk og måske overser jeg det.

      1.    giskard sagde han

        I Python bruger du ikke nøgler som i C eller begynder / slutter blokke som i Pascal, men alt forstås gennem indrykket, du giver koden. Det vil sige, blokke genkendes ved at være indrykket. Det er en funktion, som jeg især elsker. Du undgår at skrive nøgler og lignende.

        1.    pandev92 sagde han

          Det kan jeg bare ikke lide, det virker enklere at sætte to små taster eller en std :: endl; end at blive set, hvis xd-linjen er godt tabuleret

          1.    Felipe sagde han

            : p Din programmeringslærer sætter et 0 til dig. Eller værre, de fyrer dig fra dit job. Det mest vigtige er, at koden er læselig med alt det, der indebærer

          2.    pandev92 sagde han

            slutter med at lukke seler, det gør mig meget mere læselig XD ..

          3.    giskard sagde han

            Helt seriøst???


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

            Du ser? Uden fordybninger forstås det ikke særlig godt. Og det er let. Med en mere kompleks, er det kun kompilatoren, der forstår det. Sagen er, da du alligevel SKAL indrykke (for at mennesker skal forstå koden), hvorfor ville det være overflødigt og bruge separatorer? Nok med indrykning, og det er det.

          4.    pandev92 sagde han

            Naturligvis forstås intet, fordi du ikke respekterer reglerne for god skrivning af et program i c / c ++. Hvad du gjorde er gyldigt for alt, som f.eks. At indlejre en funktion, inde i en funktion inde i en anden funktion, der er inde i en anden, så vil jeg se dig xd, hvis du er i stand til at forstå det.

          5.    pandev92 sagde han

            forresten, med to udseende, er den kode let forståelig xD

          6.    giskard sagde han

            Hvad jeg gjorde, gjorde jeg med vilje for at vise dig, at uden indrykning, selvom det kompileres, er det ekstremt svært at forstå nogen kode. Så du har 2 regler: Indrykning og omfatte afgrænsere. Men det er overflødigt. I Python accepteres en sådan kode simpelthen ikke af tolken. Og du har kun en regel: Indrykning. Let.
            Men hej, alle med deres smag.

          7.    Atheyus sagde han

            Begge er gode, indrykket og ikke-indrykket, efter min mening foretrækker jeg semikolon-stil eller rubin, der ligner python, men indrykket er ikke nødvendigt.

            Dette forstås bedre: P:

            echo '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; standard: fprintf (stderr, »Dårlig mulighed% s \ n », argv [1]); brug ();} ++ argv; –argc;} hvis (argc == 1) {do_file (" print.in ");} andet {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;'

            Hilsner 😀

      2.    giskard sagde han

        Jeg tror Carlos betyder, at hvor koden kommer ud, er der ingen indrykninger. Det med copy & paste virker bare ikke. Jeg ved ikke, om tagget findes, når jeg opretter et indlæg for at indtaste sprogkode. Det ville være godt, hvis de sagde det, hvis det ikke eksisterer.

        1.    giskard sagde han

          Jeg har allerede set, hvad problemet er: CODE Tag fjerner alle mellemrum og faner (det skulle det ikke gøre !!!) Men hvis du lægger en nbsp på det, ser koden godt ud. A0 i hex (160 i dec), selvom jeg tror, ​​det kan afhænge af skrifttypen (jeg ved det ikke). Hvis det bruges, kommer det sådan ud:

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

          At det i mine tests ser godt ud, men jeg har ikke en forhåndsvisning, når jeg sender svar (og det burde være det !!!) Hvis det ikke kommer ud, er det ikke min skyld

          1.    marianogaudix sagde han

            Se på eksemplerne, som Sebastian Pölsterl giver i sin PyGTK 3-tutorial, Sebastian placerer ikke etiketter.

            Eksempel:

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

            du kan se hele Sebastians vejledning.

          2.    giskard sagde han

            Jeg ved ikke, hvad du mener. Hvad jeg siger er, at det her i posterne ikke er muligt at bruge HTML-koden «KODE», så det, du sætter som kode, og det kommer godt indrykket ud. På den side, du henviser til, hvis du ser sidekilderne, vil du se, at den ikke bruger KODE, men bruger andre HTML-afgrænsere.
            Det er ikke imod den kode, du indsætter, men snarere påpeger en fejl i dette systems opslagssystem. Hvilket måske administratorer kan ordne.
            Når jeg taler om tags, taler jeg naturligvis om HTML, ikke om Python. Under alle omstændigheder, hvis du lægger kode uden indrykning i Python, virker det bare ikke. Hvis en nybegynder kommer og kopierer koden, som den vises i dette indlæg, og forsøger at køre den, fejler han. Du kan blive frustreret, da du er nybegynder. Igen er fejlen ikke din; og i mit umiddelbare forrige svar, hvad jeg gjorde, var at give en måde at løse problemet på fra bruger-hvem-indlæg-niveau.

          3.    marianogaudix sagde han

            Du har helt ret, jeg skulle have uploadet fotos i stedet for at kopiere koden.
            for at vise, hvordan udsagn er ordnet ordentligt i PyGTK 3.

  7.   Felipe sagde han

    For at programmere med python anbefaler jeg at bruge Eclipse med PyDev plugin eller Pychar m

  8.   louis sagde han

    Som kommenteret ovenfor er det netop derfor, jeg ikke kan lide python på grund af indrykningsproblemet. Som vi har set, fungerer kopiering og indsættelse ikke, hvilket ikke sker med andre sprog som C, Java, PHP osv.

    Læseligheden ting, vi anvender en kode beautifier (som http://indentcode.net/ ) og klar,

    Det grimme er løst, men hvis der ikke er nogen indrykning, og logikken ændres, lyder vi ..

  9.   Carlos sagde han

    Jeg er ny på PyGTK, er det muligt at interagere med shell-scripts på dette sprog?

    1.    hola sagde han

      Tak for vejledningen.

      Greetings.