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

Vi skal lage et lite program med PyGTK 3.0 som også fungerer for PyGTK 3.4. Denne lille brukergrensesnittet vil lære deg hvordan du deler et program i to eller flere filer.

Du kan besøke Sebastian Pölsterls veiledning om nye PyGTK 3, her er den nye veiledningen, jeg legger igjen lenken:

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

Dette er Sebastians blogg.

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

En kritikk av denne opplæringen fra Sebastian er at den ikke lærer hvordan man skal dele et program i deler eller i flere filer, det hadde vært bra om han viste et eksempel på hvordan man gjør det med PyGTK 3.

Alle store og komplekse programmer er delt inn i mange filer, og filene plasseres til og med i andre kataloger, det vil si at de ligger i forskjellige mapper.

La oss starte med det lille eksemplet:

Her er skrivekoden i en enkelt fil som heter gui.py. Vi åpner Gedit-tekstredigereren eller redigereren vi bruker mest, kopier koden nedenfor og lagre den som gui.py

fra gi.repository import Gtk klasse gui (): def on_open_clicked (selv, knapp): skriv ut "\" Åpne \ "knappen ble klikket" def on_close_clicked (selv, knapp): skriv ut "Lukkingsapplikasjon" 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. 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 ("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 ()

pediment

def on_open_clicked (selv, knapp): print "\" Åpne \ "knappen ble klikket"

Det er en funksjon som aktiveres i terminalen når vi klikker på åpen knapp. Signalet for å aktivere det er:

self.button.connect ("klikket", self.on_open_clicked) def on_close_clicked (selv, knapp): skriv ut "Avslutningsapplikasjon" Gtk.main_quit ()

Det er en funksjon som aktiveres når vi klikker på lukkeknappen.

lukk programmet vi kjører.

signalet for å aktivere det er

self.button.connect ("klikket", self.on_close_clicked) fra gi.repository import Gtk ### vi påkaller PyGTK biblioteker ### klasse gui (): ### klassedefinisjon kalt gui er hovedklassen # ##

Erklæring om widgets: en widgets er et program som er forhåndsbestemt av GUI-bibliotekene vi bruker. For eksempel er en widget en knapp, et vindu, en boks osv. Dette er widgetene som vi erklærer i programmet vårt.

self.window = Gtk.Window () ### vindu ### self.box = Gtk.Box () ### box #### self.button = Gtk.Button (label = 'Åpne') ### # åpen knapp #### self.button = Gtk.Button (label = 'Close') #### close button #### self.window.add (self.box) #### boksen er inneholdt vinduet kalt vindu #### self.box.pack_start (self.button, True, True, 0) ##### knappen er inneholdt i boksen som heter box ### self.window.show_all () ## # vi viser hele vinduet ### gui = gui () ### oppretter et gui-objekt ####

Vi plasserer programmet vårt i en mappe som heter enkel i vårt tilfelle på skrivebordet

Fert

Vi åpner mappen med terminalen, i mitt tilfelle bruker jeg Nemo fra Linux Mint 14.

stengt

For å kompilere legger vi i terminalen python gui.py

se bildet.

terminal

Nå kan vi se det lille programmet vårt eller den nye widgeten opprettet med PyGTK 3-bibliotekene

Det er et enkelt vindu med to knapper.

Uten tittel

Nå deler vi programmet i tre deler, så lar jeg koden for de tre filene.

Første gui.py-fil

fra gi.repository import Gtk fra ødelegge import ødelegge fra io import io klasse gui (ødelegge, 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 ()

Andre io.py-fil

klasse io: def on_open_clicked (selv, knapp): trykk "\" Åpne \ "knappen ble klikket"

Tredje fil destroy.py

fra gi.repository import Gtk-klasse ødelegge: def on_close_clicked (selv, knapp): skriv ut "Lukkingsapplikasjon" Gtk.main_quit ()

Vi plasserer de tre filene i samme mappe i vårt tilfelle, mappen kalles enkel delt.

enkel

Å kompilere de tre filene. Vi åpner mappen med terminalen og legger den bare tilbake i terminalen

python gui.py

Endringer i gui.py-koden

fra ødelegge import ødelegge ### uttalelse for å importere filen vår ødelegge.py ### fra io importere io ### uttalelse for å importere filen vår io.py ### klasse gui (ødelegge, io): #### til klasse main legger vi til underklassene ødelegger og io ####

Du kan se at setningen

def on_open_clicked (selv, knapp): print "\" Åpne \ "knappen ble klikket"

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

Setning

def on_close_clicked (selv, knapp):

skriv ut "Avslutningsapplikasjon"
Gtk.main_quit ()

den ligger i filen destroy.py

Dermed kan vi dele et program i mange filer som ligger i forskjellige kataloger samtidig.

På den annen side er Python en pilar av gratis programvare, og den er tilpasset for å fungere med GTK 3.6 /3.8, dens navn er PyGTK. Pythons tilpasning for KDE kalles PyQT.

Python er tilpasset Mac OS og WINDOWS.

Jeg håper denne PyGTK3 mini-opplæringen har vært nyttig for deg. De kan komme med all den konstruktive kritikken de ønsker.

Jeg kjenner også noen Gtk 3.4 /3.6 og Vala GTK 3.4 / 3.6.

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

Til slutt beklager KDE-brukere at de ikke har gjort en miniopplæring for KDE.


Legg igjen kommentaren

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Kontroller SPAM, kommentaradministrasjon.
  3. Legitimering: Ditt samtykke
  4. Kommunikasjon av dataene: Dataene vil ikke bli kommunisert til tredjeparter bortsett fra ved juridisk forpliktelse.
  5. Datalagring: Database vert for Occentus Networks (EU)
  6. Rettigheter: Når som helst kan du begrense, gjenopprette og slette informasjonen din.

  1.   råtner87 sa

    I kde foretrekker jeg å bruke kdevelop (jeg tror det heter det) for å lage gui på en enkel måte, men jeg har fortsatt vanskelig for å finne prosessene for å få det til å skje x ting: '(

  2.   st0rmt4il sa

    Flott for de av oss som bruker Python: D!

    Greetings!

  3.   Pablo sa

    Hei, jeg har fulgt dette samfunnet i lang tid, og jeg er ikke veldig sikker på om dette er første gang jeg har kommentert, eller at jeg allerede har gjort det før soya (jeg er ikke veldig gitt til å skrive kommentarer på nettet egentlig). Saken er at jeg gjør det for å legge igjen et forslag til Elav og KZKG ^ Gaara som administratorer, og jeg tror det ville være lurt å legge til et plugin for syntaksfarging nå i det siste ser jeg flere innlegg med kode på forskjellige programmeringsspråk. Jeg vet at det er ganske mange plugins, men jeg har ikke prøvd noen siden jeg ikke er en WordPress-bruker, så jeg lar deg tenke på levedyktigheten til forespørselen. Jeg benytter anledningen til å spørre resten av leserne hva de synes om ideen, fordi jeg vet at det er folk der ute som foretrekker å lese koden uten noe pryd. Jeg beklager hvis dette allerede er kommentert her og det ble avvist av en eller annen grunn, da jeg ikke husker å ha sett noen diskusjon om emnet.

    1.    marianogaudix sa

      Sannheten er at jeg vil ha muligheten til å fargelegge syntaksen for å markere koden til programmeringsspråkene.
      Det vil hjelpe brukere som ønsker å lære programmeringsspråk.

      Men hei, jeg er også komfortabel med forumet og at vi kan diskutere og lære sammen.

      1.    eliotime3000. sa

        GNU Emacs er mer behagelig, for i det minste må du velge i hvilken programmeringsspråkkontroll du vil jobbe (hvis du ikke vil ha mer vekt for prosessoren din, bruk GNU Nano og nyt minimalisme på sitt beste).

        1.    marianogaudix sa

          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. sa

            Å, jeg beklager.

        2.    pandev92 sa

          Naaa emacs er behagelig for de som har 84 fingre XD .., normale mennesker, tekstkompis, sublimetekst eller notisblokk ++ xd

          1.    eliotime3000. sa

            Den usannsynlige tingen er ikke å ha lært å skrive, noe som kreves for å kunne håndtere GNU Emacs og tastatursnarveiene. I tillegg gjør GUI det enkelt for deg å bruke menyene (den kan brukes i Windows, men det anbefales ikke å gjøre det med normal modus, men med ledetekstmodusen slik at win32 ikke boikotterer skriptet ditt).

  4.   Carper sa

    Veldig kul tutorial. Men forresten kompilerer ikke python kildekode, det er tolket språk.

    1.    giskard sa

      Den kan kompileres til pseudokode. Det er ikke maskinspråk, men byte som representerer noe for tolken, men prosessen kalles også kompilert. Slik sett er det mulig å si at noe er samlet.

  5.   hty sa

    Kanskje det er bedre å lære pytgk2 fordi den siste versjonen som er tilgjengelig for Windows er 2.24. Serie 3 er iøynefallende med sitt fravær. Og de dårlige tungene sier at nisse bryter alle apisene i hver nye versjon.

    1.    marianogaudix sa

      Jeg programmerer en mockup med GTK 3.4 / 3.6 og sannheten er at de bryter tålmodigheten og hodet ditt, du må skrive om koden, nå forstår jeg hvorfor Linux Mint-folk klager på GTK og GNOME-prosjektet.
      For de av MINT er jeg enig med GTK 2.4 dette skjedde ikke.

  6.   Carlos sa

    God veiledning og referanser.
    Bare en detalj, siden kode er lagt inn, er innrykk i Python obligatorisk og bør respekteres i eksempelkoden.

    Greetings!

    1.    marianogaudix sa

      Kan du forklare hva de obligatoriske identifikasjonene i Python består av? Jeg sier deg sannheten, det har jeg aldri hørt. Jeg er dårlig vant til PyGTK 2/3-forumene på engelsk og kanskje overser jeg det.

      1.    giskard sa

        I Python bruker du ikke nøkler som i C eller begynner / slutter blokker som i Pascal, men alt blir forstått gjennom fordypningen du gir til koden. Det vil si at blokkene er anerkjent som innrykkede. Det er en funksjon som jeg er spesielt glad i. Du unngår å skrive nøkler og sånne ting.

        1.    pandev92 sa

          Jeg liker det bare ikke, det virker enklere å sette to små nøkler eller en std :: endl;, enn å bli sett hvis xd-linjen er godt tabellert

          1.    felipe sa

            : p Programmeringslæreren din setter en 0 for deg. Eller verre, de vil fyre deg fra jobben din. Det som betyr mest er at koden er lesbar med alt det innebærer

          2.    pandev92 sa

            slutter med å lukke bukseseler, det gjør meg mye mer lesbar XD ..

          3.    giskard sa

            Alvor???


            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? Uten fordypninger er det ikke veldig godt forstått. Og det er enkelt. Med en mer kompleks, er det bare kompilatoren som forstår det. Saken er at siden du MÅ skjule innrykk uansett (for at mennesker skal forstå koden), hvorfor må du være overflødig og bruke separatorer? Nok med innrykk og det er det.

          4.    pandev92 sa

            Selvfølgelig er ingenting forstått, fordi du ikke respekterer reglene for god skriving av et program i c / c ++. Det du gjorde er gyldig for hva som helst, for eksempel å hekke en funksjon, inne i en funksjon i en annen funksjon som er inne i en annen, så vil jeg se deg xd hvis du er i stand til å forstå den.

          5.    pandev92 sa

            forresten, med to utseende, er den koden lett forståelig xD

          6.    giskard sa

            Det jeg gjorde gjorde jeg med vilje for å vise deg at uten innrykk, selv om det kompilerer, er det ekstremt vanskelig å forstå noen kode. Så du har to regler: Innrykk og omfatte avgrensere. Men det er overflødig. I Python aksepteres slik kode rett og slett ikke av tolken. Og du har bare en regel: Innrykk. Lett.
            Men hei, alle med smak.

          7.    Atheyus sa

            Begge er gode, innrykkede og ikke-innrykkede, etter min mening foretrekker jeg semikolon-stil eller rubin, ligner på python, men innrykk er ikke nødvendig.

            Dette er bedre forstått: P:

            ekko '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 alternativ% s \ n », argv [1]); bruk ();} ++ argv; –argc;} hvis (argc == 1) {do_file (" print.in ");} annet {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;'

            Hilsen 😀

      2.    giskard sa

        Jeg tror Carlos mener at der koden kommer ut, er det ingen innrykk. Det med copy & paste vil bare ikke fungere. Jeg vet ikke om taggen eksisterer når du oppretter et innlegg for å angi språkkode. Det ville være bra hvis de sa det hvis det ikke eksisterer.

        1.    giskard sa

          Jeg har allerede sett hva problemet er: CODE Tag fjerner alle mellomrom og faner (det burde ikke gjøre det !!!) Men hvis du setter en nbsp på den, ser koden bra ut. A0 i heks (160 i des), selv om jeg tror det kan avhenge av skriften (jeg vet ikke). Hvis den brukes, kommer den ut slik:

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

          At det i testene mine ser bra ut, men jeg har ikke en forhåndsvisning når jeg legger ut svar (og det burde være det !!!) Hvis det ikke kommer ut, er det ikke min feil 😉

          1.    marianogaudix sa

            Se på eksemplene som Sebastian Pölsterl gir i sin PyGTK 3-opplæring, Sebastian legger ikke etiketter.

            Eksempel:

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

            du kan se hele veiledningen til Sebastian.

          2.    giskard sa

            Jeg vet ikke hva du mener. Det jeg sier er at her, i innleggene, er det ikke mulig å bruke HTML-koden «KODE» slik at det du legger som kode og det kommer godt innrykket. Hvis du ser sidekildene på siden du henviser, vil du se at den ikke bruker KODE, men bruker andre HTML-avgrensere.
            Det er ikke i strid med koden du legger inn, men påpeker heller en feil i innleggssystemet på dette nettstedet. Som kanskje administratorer kan fikse.
            Når jeg snakker om koder snakker jeg tydeligvis om HTML, ikke Python. I alle fall, hvis du legger kode uten innrykk i Python, vil det bare ikke fungere. Hvis en nybegynner kommer og kopierer koden slik den vises i dette innlegget og prøver å kjøre den, vil han mislykkes. Du kan bli frustrert fordi du er en nybegynner. Igjen, feilen er ikke din; og i mitt umiddelbare forrige svar var det jeg gjorde å gi en måte å løse problemet på fra bruker-hvem-innlegg-nivå.

          3.    marianogaudix sa

            Du har helt rett, jeg burde ha lastet opp bilder i stedet for å kopiere koden.
            for å vise hvordan uttalelser er ordnet ordentlig i PyGTK 3.

  7.   felipe sa

    For å programmere med python anbefaler jeg å bruke Eclipse med PyDev-plugin, eller Pychar m

  8.   louis sa

    Som kommentert ovenfor, er det akkurat derfor jeg ikke liker python på grunn av innrykkproblemet. Som vi har sett, vil ikke kopiering og liming fungere, noe som ikke skjer med andre språk som C, Java, PHP, etc.

    Lesbarheten, vi bruker en kode forskjønnere (som http://indentcode.net/ ) og klar,

    Det stygge er løst, men hvis det ikke er noen innrykk og logikken er endret, høres vi ..

  9.   Carlos sa

    Jeg er ny på PyGTK, er det mulig å samhandle med skallskript på dette språket?

    1.    Hallo sa

      Takk for veiledningen.

      Hilsener.