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

Vi ska göra ett litet program med PyGTK 3.0 som också fungerar för PyGTK 3.4. Denna lilla GUI lär dig hur du delar upp ett program i två eller flera filer.

Du kan besöka Sebastian Pölsterls handledning om nya PyGTK 3, här är den nya handledningen, jag lämnar länken:

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

Det här är Sebastians blogg.

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

En kritik av denna handledning av Sebastian är att den inte lär ut hur man delar upp ett program i delar eller i flera filer, det hade varit bra om han visade ett exempel på hur man gör det med PyGTK 3.

Alla stora och komplexa program är uppdelade i många filer och filerna placeras till och med i andra kataloger, det vill säga de finns i olika mappar.

Låt oss börja med det lilla exemplet:

Här är skrivkoden i en enda fil som heter gui.py. Vi öppnar Gedit-textredigeraren eller den redigerare som vi använder mest, vi kopierar koden nedan och sparar den som gui.py

från gi.repository import Gtk klass gui (): def on_open_clicked (själv, knapp): skriv ut "\" Öppna \ "-knappen klickades" def on_close_clicked (själv, knapp): skriv ut "Avslutande applikation" 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 ("clicked", 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 ()

frontonen

def on_open_clicked (själv, knapp): tryck på "\" Öppna \ "-knappen klickades"

Det är en funktion som aktiveras i terminalen när vi klickar på öppna knappen. Signalen för att aktivera den är:

self.button.connect ("clicked", self.on_open_clicked) def on_close_clicked (self, button): print "Closing application" Gtk.main_quit ()

Det är en funktion som aktiveras när vi klickar på stängningsknappen.

stäng programmet vi kör.

signalen för att aktivera den är

self.button.connect ("clicked", self.on_close_clicked) från gi.repository import Gtk ### vi åberopar PyGTK-bibliotek ### klass gui (): ### klassdefinition som kallas gui är huvudklassen # ##

Widgetsdeklaration: en widgets är ett program som är förutbestämt av de grafiska gränssnittsbiblioteken som vi använder. Till exempel är en widget en knapp, ett fönster, en ruta etc. Det här är de widgets som vi förklarar i vårt program.

self.window = Gtk.Window () ### fönster ### self.box = Gtk.Box () ### box #### self.button = Gtk.Button (label = 'Open') ### # öppen knapp #### self.button = Gtk.Button (label = 'Stäng') #### stäng knapp #### self.window.add (self.box) #### rutan finns i fönstret kallas fönster #### self.box.pack_start (self.button, True, True, 0) ##### knappen finns i rutan som heter box ### self.window.show_all () ## # vi visar hela fönstret ### gui = gui () ### skapa ett gui-objekt ####

Vi lägger vårt program i en mapp som kallas enkel i vårt fall på skrivbordet

Fert

Vi öppnar mappen med terminalen, i mitt fall använder jag Nemo från Linux Mint 14.

stängt

För att kompilera placerar vi i terminalen python gui.py

se bilden.

terminala

Nu kan vi se vårt lilla program eller nya widget skapad med PyGTK 3-biblioteken

Det är ett enkelt fönster med två knappar.

Ofrälse

Nu delar vi upp programmet i tre delar, nedan lämnar jag koden för de tre filerna.

Första gui.py-filen

från gi.repository import Gtk från förstör import förstör från io import io klass gui (förstör, io): def __init __ (själv): 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 ("clicked", 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 ()

Andra io.py-filen

klass io: def on_open_clicked (själv, knapp): skriv ut "\" Öppna \ "knappen klickades"

Tredje filen destroy.py

från gi.repository import Gtk-klass förstör: def on_close_clicked (själv, knapp): skriv ut "Stängningsapplikation" Gtk.main_quit ()

Vi placerar de tre filerna i samma mapp i vårt fall, mappen heter enkel uppdelad.

enkel

Att kompilera de tre filerna. Vi öppnar mappen med terminalen och lägger den helt enkelt tillbaka i terminalen

python gui.py

Ändringar av gui.py-koden

från förstör import förstör ### uttalande för att importera vår fil förstör.py ### från io import io ### uttalande för att importera vår fil io.py ### klass gui (förstör, io): #### till class main lägger vi till underklasserna förstör och io ####

Du kan se att meningen

def on_open_clicked (själv, knapp): tryck på "\" Öppna \ "-knappen klickades"

Det finns inte i gui.py, det är i io.py-filen

Mening

def on_close_clicked (själv, knapp):

skriva ut "Avslutande ansökan"
Gtk.main_quit ()

den finns i filen destroy.py

Således kan vi dela upp ett program i många filer som ligger i olika kataloger samtidigt.

Å andra sidan är Python en pelare för fri programvara och är anpassad för att fungera med GTK 3.6 /3.8, dess namn är PyGTK. Pythons anpassning för KDE kallas PyQT.

Python är anpassad för Mac OS och WINDOWS.

Jag hoppas att denna PyGTK3 mini-handledning har varit till hjälp för dig. De kan ge all den konstruktiva kritik de vill ha.

Jag känner också till några Gtk 3.4 /3.6 och Vala GTK 3.4 / 3.6.

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

Slutligen ber KDE-användare om ursäkt för att de inte har gjort en minihandledning för KDE.


Lämna din kommentar

Din e-postadress kommer inte att publiceras. Obligatoriska fält är markerade med *

*

*

  1. Ansvarig för uppgifterna: Miguel Ángel Gatón
  2. Syftet med uppgifterna: Kontrollera skräppost, kommentarhantering.
  3. Legitimering: Ditt samtycke
  4. Kommunikation av uppgifterna: Uppgifterna kommer inte att kommuniceras till tredje part förutom enligt laglig skyldighet.
  5. Datalagring: databas värd för Occentus Networks (EU)
  6. Rättigheter: När som helst kan du begränsa, återställa och radera din information.

  1.   Rötter87 sade

    I kde föredrar jag att använda kdevelop (jag tror det är vad det heter) för att skapa gui på bekvämlighet men jag har fortfarande svårt att hitta processerna för att få det att hända x sak: '(

  2.   st0rmt4il sade

    Perfekt för de av oss som använder Python: D!

    Hälsningar!

  3.   Paul sade

    Hej, jag har följt den här gruppen länge och jag är inte säker på om det här är första gången jag kommenterar eller att jag redan har gjort det tidigare 😀 (jag har inte riktigt gett att skriva kommentarer på webben egentligen). Saken är att jag gör det för att lämna ett förslag till Elav och KZKG ^ Gaara som administratörer, och jag tror att det skulle vara en bra idé att lägga till ett plugin för syntaxfärgning nu när jag nyligen ser fler inlägg med kod på olika programmeringsspråk. Jag vet att det finns en hel del plugins men jag har inte provat några eftersom jag inte är en wordpress-användare, så jag låter dig tänka på hur bra begäran är. Jag tar tillfället i akt och frågar resten av läsarna vad de tycker om idén, för jag vet att det finns människor där ute som föredrar att läsa koden utan prydnad. Jag ber om ursäkt om detta redan har kommenterats här och det avvisades av någon anledning, eftersom jag inte kommer ihåg att jag sett någon diskussion om ämnet.

    1.    marianogaudix sade

      Sanningen är att jag skulle vilja ha möjlighet att färga syntaxen för att markera koden för programmeringsspråken.
      Det skulle hjälpa användare som vill lära sig programmeringsspråk.

      Men hej, jag är också bekväm med forumet och att vi kan diskutera och lära tillsammans.

      1.    eliotime3000 sade

        GNU Emacs är bekvämare, för åtminstone måste du välja i vilken programmeringsspråkkontroll du vill arbeta (om du inte vill ha mer vikt för din processor, använd GNU Nano och njut av minimalism som bäst).

        1.    marianogaudix sade

          Elio vi pratar om WordPress. Implementerad på bloggen Desde Linux. Den har inte funktionerna att färga bokstäverna i inläggen.

          1.    eliotime3000 sade

            Åh jag är ledsen.

        2.    pandev92 sade

          Naaa emacs är bekvämt för dem som har 84 fingrar XD .., vanliga människor, textmate, sublimetext eller anteckningsblock ++ xd

          1.    eliotime3000 sade

            Det osannolika är att du inte har lärt dig att skriva, vilket krävs för att kunna hantera GNU Emacs och dess kortkommandon. Dessutom gör dess GUI det enkelt för dig att använda menyerna (den kan användas i Windows, men det rekommenderas inte att göra det i normalt läge utan med kommandotolken så att win32 inte bojkottar ditt skript).

  4.   Carper sade

    Mycket cool handledning. Men förresten är inte pythonkällkoden kompilerad, det är ett tolkat språk.

    1.    giskard sade

      Det kan sammanställas till pseudokod. Det är inte maskinspråk utan byte som representerar något för tolken, men processen kallas också kompilerad. I den meningen är det möjligt att säga att något sammanställs.

  5.   HTY sade

    Kanske är det bättre att lära sig pytgk2 eftersom den senaste versionen som finns tillgänglig för Windows är 2.24. Serie 3 är iögonfallande av sin frånvaro. Och de dåliga tungorna säger att gnome bryter alla apis i varje ny version.

    1.    marianogaudix sade

      Jag programmerar en mockup med GTK 3.4 / 3.6 och sanningen är att de bryter ditt tålamod och ditt huvud, du måste skriva om koden, nu förstår jag varför Linux Mint-folket klagar på GTK och GNOME-projektet.
      För de av MINT håller jag med GTK 2.4 detta hände inte.

  6.   Carlos sade

    Bra handledning och referenser.
    Bara en detalj, eftersom kod har lagts in, är Python-fördjupningar obligatoriska och bör respekteras i exempelkoden.

    Hälsningar!

    1.    marianogaudix sade

      Kan du förklara vad de obligatoriska identifieringarna i Python består av? För att säga sanningen har jag aldrig hört det. Jag är dåligt van vid PyGTK 2/3-forumen på engelska och kanske förbiser det.

      1.    giskard sade

        I Python använder du inte nycklar som i C eller börjar / slutar block som i Pascal, men allt förstås genom indragningen du ger till koden. Det vill säga blocken känns igen genom att de är indragna. Det är en funktion som jag särskilt älskar. Du undviker att skriva nycklar och sådant.

        1.    pandev92 sade

          Jag gillar det bara inte, det verkar enklare att sätta två små tangenter eller en std :: endl; än att se om xd-linjen är väl tabulerad

          1.    felipe sade

            : p Din programmeringslärare sätter ett 0 åt dig. Eller värre kommer de att sparka dig från ditt jobb. Det viktigaste är att koden är läsbar med allt det innebär

          2.    pandev92 sade

            slutar med att stänga hängslen, det gör mig mycket mer läsbar XD ..

          3.    giskard sade

            Allvarligt???


            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? Utan fördjupningar är det inte särskilt väl förstått. Och det är enkelt. Med en mer komplex förstår bara kompilatorn det. Saken är, eftersom du måste göra ett indrag ändå (för människor att förstå koden) varför skulle du behöva vara överflödig och använda separatorer? Nog med indrag och det är det.

          4.    pandev92 sade

            Naturligtvis förstås ingenting, för du respekterar inte reglerna för bra skrivning för ett program i c / c ++. Vad du gjorde är giltigt för vad som helst, som att kapa en funktion, inuti en funktion inuti en annan funktion som är inuti en annan, då vill jag se dig xd om du kan förstå den.

          5.    pandev92 sade

            förresten, med två utseende, är den koden lättförståelig xD

          6.    giskard sade

            Vad jag gjorde gjorde jag medvetet för att visa dig att det är extremt svårt att förstå någon kod utan fördjupning, även om den sammanställs. Så du har två regler: indrag och omfattar avgränsare. Men det är överflödigt. I Python accepteras sådan kod helt enkelt inte av tolk. Och du har bara en regel: indrag. Lätt.
            Men hej, alla med sin smak.

          7.    Atheyus sade

            Båda är bra, indragna och icke-indragna, enligt min mening föredrar jag semikolonstil eller rubin, liknar python men indragning är inte nödvändigt.

            Således förstås det bättre: 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åligt alternativ % s \ n », argv [1]); användning ();} ++ argv; –argc;} if (argc == 1) {do_file (" print.in ");} annat {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;'

            Hälsningar 😀

      2.    giskard sade

        Jag tror Carlos menar att där koden kommer ut finns det inga indrag. Det med copy & paste fungerar bara inte. Jag vet inte om taggen finns när du skapar ett inlägg för att ange språkkod. Det skulle vara bra om de uttrycker det om det inte finns.

        1.    giskard sade

          Jag har redan sett vad problemet är: CODE-taggen tar bort alla mellanslag och flikar (det borde inte göra det !!!) Men om du lägger en nbsp på den ser koden bra ut. A0 i hex (160 i dec) även om jag tror att det kan bero på teckensnittet (jag vet inte). Om den används kommer den ut så här:

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

          Vilket i mina tester ser bra ut, men jag har ingen förhandsgranskning när jag lägger in svar (och det borde finnas det !!!) Om det inte kommer ut är det inte mitt fel 😉

          1.    marianogaudix sade

            Titta på exemplen som Sebastian Pölsterl lägger i sin PyGTK 3-handledning, Sebastian placerar inte etiketter.

            Exempel:

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

            du kan se hela Sebastians handledning.

          2.    giskard sade

            Jag vet inte vad du menar. Vad jag säger är att det här, i inläggen, inte är möjligt att använda "CODE" HTML-taggen så att det du lägger som kod och det kommer ut väl indragen. Om du tittar på sidkällorna ser du att den inte använder KOD utan använder andra HTML-avgränsare på sidan du hänvisar till.
            Det strider inte mot koden utan snarare påpekar en brist i postningssystemet på denna webbplats. Vilket kanske administratörer kan fixa.
            När jag pratar om taggar pratar jag uppenbarligen om HTML, inte Python. I vilket fall som helst, om du lägger in kod utan indrag i Python fungerar det bara inte. Om en nybörjare kommer och kopierar koden som den visas i det här inlägget och försöker köra den kommer han att misslyckas. Du kan bli frustrerad eftersom du är nybörjare. Återigen är felet inte ditt; och i mitt omedelbara tidigare svar var vad jag gjorde att ge ett sätt att lösa problemet från användar-vem-inlägg-nivån.

          3.    marianogaudix sade

            Du har helt rätt, jag borde ha laddat upp foton istället för att kopiera koden.
            för att visa hur uttalanden ordnas ordentligt i PyGTK 3.

  7.   felipe sade

    För att programmera med python rekommenderar jag att du använder Eclipse med PyDev-plugin, eller Pychar m

  8.   louis sade

    Som nämnts ovan är det precis därför jag inte gillar python på grund av fördjupningarna. Som vi såg fungerar inte kopiering och klistra in, vilket inte händer med andra språk som C, Java, PHP, etc.

    Läsbarheten, vi använder en kodförskönare (som http://indentcode.net/ ) och redo,

    Det fula är fixat, men om det inte finns någon indragning och logiken ändras låter vi ..

  9.   Carlos sade

    Jag är ny på PyGTK, är det möjligt att interagera med skalskript på det här språket?

    1.    Hallå sade

      Tack för handledningen.

      Hälsningar.