PyGTK 3: mini tutorial de GUI amb Python + GTK +3

Anem a fer un petit programa amb PyGTK 3.0 que també funciona per a PyGTK 3.4. Aquesta petita GUI els ensenyés com dividir un programa en dos a mes arxius.

Vostès poden visitar el tutorial de Sebastian Pölsterl sobre el nou PyGTK 3, aquí hi ha el nou tutorial, els deixo el link:

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

Aquest és el blog de Sebastian.

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

Una critica a aquest tutorial de Sebastian és que no ensenya a dividir un programa en parts o en diversos arxius, hauria estat bo que mostrés un exemple de com fer-amb PyGTK 3.

Tots els programes grans i complexos es divideixen en molts arxius i fins i tot els arxius es col·loquen en altres directoris, és a dir s'ubiquen en diferents carpetes.

Comencem amb el petit exemple:

Aquí els deixo el codi de l'escrit en un sol arxiu anomenat gui.py. Obrim l'editor de text Gedit o l'editor que més usem, copiem el codi de sota i el guardem com gui.py

from gi.repository import Gtk class gui (): def on_open_clicked (self, button): print "\" Open \ "button was clicked" 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 ( "clicked", self.on_open_clicked) self.box.pack_start (self.button, True, True, 0) self.button = Gtk.Button ( label = 'Tancar') 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 ()

frontó

def on_open_clicked (self, button): print "\" Open \ "button was clicked"

És una funció que s'activa en el terminal quan fem clic al botó open. El senyal per activar-la és:

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

és una funció que s'activa quan fem Clix al botó tancar.

tanca el programa que executem.

el senyal per activar-la és

self.button.connect ( "clicked", self.on_close_clicked) from gi.repository import Gtk ### invoquem a les llibreries de PyGTK ### class gui (): ### definició de classe anomenada gui és la classe principal # ##

Declaració de Ginys: XNUMX ginys és un programa predeterminat per les llibreries de interfície gràfica que fem servir. Per exemple un ginys és un botó, una finestra, una caixa, etc. Aquests són els ginys que declarem en la nostra programa.

self.window = Gtk.Window () ### finestra ### self.box = Gtk.Box () ### caixa #### self.button = Gtk.Button (label = 'Open') ### # boto open #### self.button = Gtk.Button (label = 'Tancar') #### boto tancar #### self.window.add (self.box) #### la caixa aquesta continguda en la finestra anomenada window #### self.box.pack_start (self.button, True, True, 0) ##### el boto aquesta contingut en la caixa anomenada box ### self.window.show_all () ## # mostrem tota la finestra ### gui = gui () ### crec un objecte gui ####

Col·loquem el nostre programa en una carpeta anomenada simple en el nostre cas a l'escriptori

fert

Obrim la carpeta amb el terminal, en el meu cas ús Nemo de Linux Mint 14.

tancat

Per compilar col·loquem al terminal python gui.py

veure la imatge.

terminal

Ara podem veure el nostre petit programa o giny nou creat amb les llibreries PyGTK 3

Es tracta d'una simple finestra amb dos botons.

Sense títol

Ara dividim el programa en tres parts a continuació els deixo el codi dels tres arxius.

Primer arxiu gui.py

from gi.repository import Gtk from destroy import destroy from io import io class gui (destroy, 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 ( "clicked", self.on_open_clicked) self.box.pack_start (self.button, True, True, 0) self.button = Gtk.Button (label = 'Tancar') 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 ()

Segon arxiu io.py

class io: def on_open_clicked (self, button): print "\" Open \ "button was clicked"

Tercer arxiu destroy.py

from gi.repository import Gtk class destroy: def on_close_clicked (self, button): print "Closing application" Gtk.main_quit ()

Col·loquem els tres arxiu en una mateixa carpeta en el nostre cas, la carpeta es diu simple dividit.

simple

Per compilar els tres arxius. Obrim la carpeta amb el terminal i simplement col·loquem de nou al terminal

python gui.py

Modificacions realitzades a el codi gui.py

from destroy import destroy ### sentència per importar el nostre arxiu destroy.py ### from io import io ### sentència per importar el nostre arxiu io.py ### class gui (destroy, io): #### ala classe principal hi afegim les subclasses destroy i io ####

Poden observar que la sentència

def on_open_clicked (self, button): print "\" Open \ "button was clicked"

no està en gui.py, es troba a l'arxiu io.py

la sentència

def on_close_clicked (self, button):

print Closing application
Gtk.main_quit ()

es troba a l'arxiu destroy.py

Així podem dividir un programa en molts arxius ubicats en diferents directoris alhora.

D'altra banda Python és un pilar de l'programari lliure, i està adaptat per funcionar amb GTK 3.6 /3.8 la seva denominació és PyGTK. L'adaptació de Python per a KDE es denomina PyQt.

Python està adaptat per a Mac OS i Windows.

Espero que els hagi estat útil aquest mini tutorial de PyGTK3. Poden fer totes les critiques constructives que vulguin.

També es una mica de Gtk 3.4 /3.6 i Vala GTK 3.4 / 3.6.

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

Per últim disculpin els usuaris del KDE per no realitzar un mini tutorial per a KDE.


Deixa el teu comentari

La seva adreça de correu electrònic no es publicarà. Els camps obligatoris estan marcats amb *

*

*

  1. Responsable de les dades: Miguel Ángel Gatón
  2. Finalitat de les dades: Controlar l'SPAM, gestió de comentaris.
  3. Legitimació: El teu consentiment
  4. Comunicació de les dades: No es comunicaran les dades a tercers excepte per obligació legal.
  5. Emmagatzematge de les dades: Base de dades allotjada en Occentus Networks (UE)
  6. Drets: En qualsevol moment pots limitar, recuperar i esborrar la teva informació.

  1.   Rots87 va dir

    jo en kde prefereixo fa servir kdevelop (crec que així es diu) per crear la gui a gust però encara em costa trobar els processos perquè succeeixi x cosa: '(

  2.   St0rmt4il va dir

    Genial per als que fem servir Python: D!

    Salutacions!

  3.   Pau va dir

    Hola porto molt de temps seguint aquesta comunitat i no estic molt segur de si aquesta és la primera vegada que comento o ja ho vaig fer abans 😀 (no sóc molt donat a escriure comentaris al web la veritat). La cosa és que ho faig per deixar un suggeriment a ILAV i KZKG ^ Gaara com a administradors, i és que penso que seria bo idea afegir un plugin per acolorit de sintaxi ara que últimament veig més posts amb codi en diferents llenguatges de programació. Es que hi ha bastants plugins però no he provat cap al no ser usuari de wordpress, així que us deixo que penseu en la viabilitat de les petició. Aprofito per preguntar a la resta de lectors que els sembla la idea, doncs es que hi ha per aquí gent que prefereix llegir el codi sense adorn algun. Demano perdó si ja s'havia comentat això per aquí i es va rebutjar per algun motiu, ja que no recordo haver vist discussió sobre el tema.

    1.    marianogaudix va dir

      La veritat m'agradaria tenir l'opció de pintar la sintaxi per ressaltar el codi dels llenguatges de programació.
      Això ajudaria als usuaris que vulguin aprendre els llenguatges de programació.

      Però bé jo igualment estic còmode amb el fòrum i que puguem discutir i aprneder entre tots.

      1.    eliotime3000 va dir

        Més còmode és GNU Emacs, ja que al menys tens per escollir en quina corrector de llenguatge de programació vols treballar (si no vols més pes per al teu processador, utilitza GNU Nano i gaudeix de l'minimalisme en la seva màxima expressió).

        1.    marianogaudix va dir

          Elio estem parlant de Worpress. Implementat al bloc Desde Linux. No té les funcions per donar color a les lletres dels postejos.

          1.    eliotime3000 va dir

            Ah, disculpa.

        2.    pandev92 va dir

          Naaa emacs és còmode per a qui té 84 dits XD .., la gent normal, TextMate, sublimetext o notepad ++ xd

          1.    eliotime3000 va dir

            El inversemblant és no haver après mecanografia, el qual s'exigeix ​​per gestionar bé GNU Emacs i els seus dreceres de teclat. A més, la seva interfície gràfica et facilita fer servir els seus menús (es pot usar en Windows, però no és recomanable fer-ho amb la manera normal sinó amb la manera símbol de sistema perquè el win32 no boicotegi el teu script).

  4.   Criticó va dir

    Molt xulo el tutorial. Però, per cert, el codi font de python no es compila, és un llenguatge interpretat.

    1.    Giskard va dir

      Es pot compilar a pseudo codi. No és llenguatge de màquina sinó bytes que representen alguna cosa per a l'intèrpret, però el procés es diu compilat també. En aquest sentit sí que és possible dir que es compila alguna cosa.

  5.   HTY va dir

    Potser és millor aprendre pytgk2 causa de que la ultima versió disponible per a Windows és la 2.24. La sèrie 3 brilla per la seva absència. I Les males llengües diuen que gnome trenca totes les apis en cada versió nova.

    1.    marianogaudix va dir

      Jo programa Mockup amb GTK 3.4 / 3.6 i la veritat et trenquen la paciència i el cap, has de reescriure el codi, ara comprenc per que els de Linux Mint es queixen de GTK i el projecte GNOME.
      Als de MINT els dono la raó amb GTK 2.4 això no succeïa.

  6.   Carlos va dir

    Bon tutorial i referències.
    Només un detall, ja que s'ha posat codi, en Python les identaciones són obligatòries i hauries de respectar en el codi d'exemple.

    Salutacions!

    1.    marianogaudix va dir

      Pots explicar en què consisteix les identificacions obligatòries en Python? .Et dic la veritat mai havia escoltat això .És que estic mal acostumats en els fòrums de PyGTK 2/3 en anglès i potser ho passi per alt.

      1.    Giskard va dir

        En Python no s'usen claus com en C o blocs begin / end com en Pascal sinó que tot s'entén a través de la indentació que li donis a el codi. És a dir, els blocs es reconeixen per estar s'indenten. És una característica que, a mi particularment, m'encanta. S'evita un el estar escrivint claus i coses així.

        1.    pandev92 va dir

          Al meu just això no m'agrada, em sembla més simple posar dos llavecitas o std :: endl ;, que l'estar viedo si està bé tabulada de la línia xd

          1.    felipe va dir

            : P et posarà un 0 teu profe de programació. O pitjor et van a acomiadar de la feina. El que més importa és que el codi sigui llegible amb tot el que això implica

          2.    pandev92 va dir

            acabant amb amb claus de tancament, es em fa molt més llegible XD ..

          3.    Giskard va dir

            De debò ???


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

            Veus? Sense les indentaciones no s'entén molt bé. I aquest és un fàcil. Amb un més complex només el compilador ho entén. La cosa és que ja que de totes maneres TENS que indentar (perquè els humans entenguin el codi) per què caldria ser redundant i utilitzar separadors? Només cal indentar i ja.

          4.    pandev92 va dir

            És clar que no s'entén res, perquè no estàs respectant les regles de bona escritorua d'un programa en c / c ++. Això que vas fer val per a qualsevol cosa, com niar òm una fncion, dins d'una funció dins una altra funció que està dins d'una altra, després vull veure't xd si ets capaç d'entendre-ho.

          5.    pandev92 va dir

            per cert, amb dues mirades, aquest codi és fàcilment comprensible xD

          6.    Giskard va dir

            Això que vaig fer el vaig fer a posta per demostrar-te que sense indentació, tot i que compila, és summament difícil entendre qualsevol codi. Llavors tens 2 regles: indentar i englobar amb delimitadors. Però això és redundant. En Python un codi així simplement no és acceptat per l'intèrpret. I només tens una regla: indentar. Fàcil.
            Però bé, cadascú amb els seus gustos.

          7.    Atheyus va dir

            Tots dos són bons, els identados i els no identados, al meu entendre prefereixo els d'estil punt i coma o com ruby, similar a python però no és necessària la sangria.

            Així s'entén mes: 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; 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);} '| perl -p -i 's / \ {/ \ {\ n \ t / g; s / \; / \; \ n \ t / g; s / \ t \} / \} / g;'

            Salutacions 😀

      2.    Giskard va dir

        Crec que Carlos es refereix al fet que on surt el codi no hi ha indents. Això amb copy & paste simplement no funcionarà. No sé si a l'crear un post existeixi el tag per ficar codi de llenguatges. Seria bo que el posessin si no existeix.

        1.    Giskard va dir

          Ja vaig veure quin és el problema: el Tag CODE elimina tots els espais i tabuladors (no hauria de fer això !!!) Però si li posen un nbsp llavors sí que queda bé el codi. A0 en hex (160 en dec) encara que crec que podria dependre de l'font (no ho sé). Si es fa servir llavors surt així:

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

          Que en els moments de prova es veu bé, però no tinc un preview a l'postejar respostes (i hauria d'haver això !!!) Si no surt no és culpa meva 😉

          1.    marianogaudix va dir

            Mira els exemples que posa Sebastian Pölsterl en el seu tutorial de PyGTK 3, Sebastian no col·loca etiquetes.

            exemple:

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

            pots veure tot el tutorial de Sebastian.

          2.    Giskard va dir

            No sé què vols dir. El que jo dic és que aquí, en els posts, no és possible fer servir el Tag HTML «CODE» perquè el que posis com a codi i surti bé indentado. A la pàgina que remitents, si veus les fonts de la pàgina, veuràs que no fa servir CODE però fa servir altres delimitadors HTML.
            No és contra el codi que vas posar sinó més bé fent notar una falla en el sistema de posts d'aquest site. El qual, potser, puguin arreglar els admins.
            Quan parlo d'etiquetes òbviament estic parlant d'HTML, no de Python. En tot cas, si fiques codi sense indentar en Python simplement no funcionarà. Si ve un principiant i copia el codi tal qual apareix en aquest post i ho intenta córrer li va a fallar. Potser es frustri doncs és novell. Un cop més, la culpa no és teva; i en la meva resposta immediata anterior el que vaig fer va ser donar una forma de solucionar el problema des del nivell d'usuari-que-postea.

          3.    marianogaudix va dir

            Tenes tota la raó, hauria d'haver pujat fotos en comptes de copiar el codi.
            per mostrar com s'ordenen les sentències adequadament en PyGTK 3.

  7.   felipe va dir

    Per programar amb python recomano utilitzar l'Eclipse amb el plugin PyDev, o el Pychar m

  8.   Luix va dir

    Com comenteban més amunt, just per això no m'agrada python, pel tema de les identaciones. Com bé vam veure, a l'fer copy & paste no funcionarà, cosa que no passa amb altres llenguatges com C, Java, PHP, etc ..

    Això de la llegibilitat, apliquem un embellidor de codis (com http://indentcode.net/ ) I llest,

    El de lleig s'arregla, però si no hi ha identación i la lògica s'altera, sonem ..

  9.   Carlos va dir

    Sóc nou en PyGTK, és possible interactuar amb shell scripts en aquest llenguatge?

    1.    Hola va dir

      Gràcies pel tutorial.

      Salutacions.