PyGTK 3: mini tutoriel GUI avec Python + GTK + 3

Nous allons faire un petit programme avec PyGTK 3.0 qui fonctionne également pour PyGTK 3.4. Cette petite interface graphique vous apprendra comment diviser un programme en deux fichiers ou plus.

Vous pouvez visiter le tutoriel de Sebastian Pölsterl sur le nouveau PyGTK 3, voici le nouveau tutoriel, je laisse le lien:

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

C'est le blog de Sebastian.

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

Une critique de ce tutoriel par Sebastian est qu'il n'enseigne pas comment diviser un programme en parties ou en plusieurs fichiers, il aurait été bien qu'il montre un exemple de comment le faire avec PyGTK 3.

Tous les programmes volumineux et complexes sont divisés en de nombreux fichiers et les fichiers sont même placés dans d'autres répertoires, c'est-à-dire qu'ils sont situés dans des dossiers différents.

Commençons par le petit exemple:

Voici le code d'écriture dans un seul fichier appelé gui.py. Nous ouvrons l'éditeur de texte Gedit ou l'éditeur que nous utilisons le plus, nous copions le code ci-dessous et le sauvegardons sous gui.py

de gi.repository import Gtk class gui (): def on_open_clicked (self, button): print "\" Open \ "bouton a été cliqué" 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 ("cliqué", self.on_open_clicked) self.box.pack_start (self.button, True, True, 0) self.button = Gtk.Button ( label = 'Close') self.button.connect ("cliqué", self.on_close_clicked) self.box.pack_start (self.button, True, True, 0) self.window.show_all () Gtk.main () if __name__ == '__main__': gui = gui ()

fronton

def on_open_clicked (self, button): print "\" Open \ "bouton a été cliqué"

C'est une fonction qui est activée dans le terminal lorsque l'on clique sur le bouton d'ouverture. Le signal pour l'activer est:

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

C'est une fonction qui s'active lorsque l'on clique sur le bouton de fermeture.

fermez le programme que nous exécutons.

le signal pour l'activer est

self.button.connect ("clicked", self.on_close_clicked) depuis gi.repository import Gtk ### nous invoquons les bibliothèques PyGTK ### class gui (): ### la définition de classe appelée gui est la classe principale # ##

Déclaration des widgets: un widgets est un programme prédéterminé par les bibliothèques GUI que nous utilisons. Par exemple, un widget est un bouton, une fenêtre, une boîte, etc. Ce sont les widgets que nous déclarons dans notre programme.

self.window = Gtk.Window () ### window ### self.box = Gtk.Box () ### box #### self.button = Gtk.Button (label = 'Open') ### # open button #### self.button = Gtk.Button (label = 'Close') #### close button #### self.window.add (self.box) #### la boîte est contenue dans la fenêtre appelée window #### self.box.pack_start (self.button, True, True, 0) ##### le bouton est contenu dans la boîte appelée box ### self.window.show_all () ## # nous montrons toute la fenêtre ### gui = gui () ### créer un objet gui ####

Nous plaçons notre programme dans un dossier appelé simple dans notre cas sur le bureau

FERT

Nous ouvrons le dossier avec le terminal, dans mon cas j'utilise Nemo de Linux Mint 14.

clos

Pour compiler nous mettons dans le terminal python gui.py

regarder la photo.

terminal

Nous pouvons maintenant voir notre petit programme ou nouveau widget créé avec les bibliothèques PyGTK 3

C'est une simple fenêtre avec deux boutons.

Sans titre

Maintenant, nous divisons le programme en trois parties, ci-dessous je laisse le code des trois fichiers.

Premier fichier gui.py

depuis gi.repository import Gtk depuis destroy import destroy depuis 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 ("cliqué", self.on_open_clicked ) self.box.pack_start (self.button, True, True, 0) self.button = Gtk.Button (label = 'Close') self.button.connect ("cliqué", self.on_close_clicked) self.box.pack_start (self.button, True, True, 0) self.window.show_all () Gtk.main () if __name__ == '__main__': gui = gui ()

Deuxième fichier io.py

class io: def on_open_clicked (self, button): print "\" Open \ "bouton a été cliqué"

Troisième fichier destroy.py

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

Nous plaçons les trois fichiers dans le même dossier dans notre cas, le dossier est appelé simple divisé.

simple

Pour compiler les trois fichiers. Nous ouvrons le dossier avec le terminal et le remettons simplement dans le terminal

python gui.py

Modifications apportées au code gui.py

from destroy import destroy instruction ### pour importer notre fichier destroy.py ### depuis io import io ### instruction pour importer notre fichier io.py ### class gui (destroy, io): #### vers la classe main nous ajoutons les sous-classes destroy et io ####

Vous pouvez voir que la phrase

def on_open_clicked (self, button): print "\" Open \ "bouton a été cliqué"

Ce n'est pas dans gui.py, mais dans le fichier io.py

Phrase

def on_close_clicked (soi, bouton):

imprimer "Clôture de la candidature"
Gtk.main_quit ()

il se trouve dans le fichier destroy.py

Ainsi, nous pouvons diviser un programme en plusieurs fichiers situés dans différents répertoires en même temps.

D'autre part, Python est un pilier du logiciel libre, et il est adapté pour fonctionner avec GTK 3.6 /3.8, son nom est PyGTK. L'adaptation de Python pour KDE s'appelle PyQT.

Python est adapté pour Mac OS et WINDOWS.

J'espère que ce mini tutoriel PyGTK3 vous a été utile. Ils peuvent faire toutes les critiques constructives qu'ils souhaitent.

Je connais aussi quelques Gtk 3.4 /3.6 et Vala GTK 3.4 / 3.6.

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

Enfin, les utilisateurs de KDE s'excusent de ne pas avoir fait un mini tutoriel pour KDE.


Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont marqués avec *

*

*

  1. Responsable des données: Miguel Ángel Gatón
  2. Finalité des données: Contrôle du SPAM, gestion des commentaires.
  3. Légitimation: votre consentement
  4. Communication des données: Les données ne seront pas communiquées à des tiers sauf obligation légale.
  5. Stockage des données: base de données hébergée par Occentus Networks (EU)
  6. Droits: à tout moment, vous pouvez limiter, récupérer et supprimer vos informations.

  1.   Pourritures87 dit

    Dans kde, je préfère utiliser kdevelop (je pense que c'est comme ça que ça s'appelle) pour créer l'interface graphique à l'aise mais j'ai encore du mal à trouver les processus pour que cela se produise x chose: '(

  2.   st0rmt4il dit

    Idéal pour ceux d'entre nous qui utilisent Python: D!

    Salutations!

  3.   Pablo dit

    Bonjour, je suis cette communauté depuis longtemps et je ne suis pas très sûr si c'est la première fois que je commente ou si je l'ai déjà fait avant soy (je ne suis pas très enclin à écrire des commentaires sur le web vraiment). Le fait est que je le fais pour laisser une suggestion à Elav et KZKG ^ Gaara en tant qu'administrateurs, et je pense que ce serait une bonne idée d'ajouter un plugin pour la coloration de la syntaxe maintenant que dernièrement je vois plus de messages avec du code dans différents langages de programmation. Je sais qu'il y a pas mal de plugins mais je n'en ai pas essayé puisque je ne suis pas un utilisateur de wordpress, donc je vous laisse réfléchir à la viabilité de la demande. Je profite de l'occasion pour demander au reste des lecteurs ce qu'ils pensent de l'idée, car je sais qu'il y a des gens qui préfèrent lire le code sans aucune parure. Je m'excuse si cela a déjà été commenté ici et qu'il a été rejeté pour une raison quelconque, car je ne me souviens pas avoir vu une discussion sur le sujet.

    1.    marianogaudix dit

      La vérité est que j'aimerais avoir la possibilité de colorer la syntaxe pour mettre en évidence le code des langages de programmation.
      Cela aiderait les utilisateurs qui souhaitent apprendre les langages de programmation.

      Mais bon, je suis aussi à l'aise avec le forum et que l'on puisse discuter et apprendre ensemble.

      1.    éliotime3000 dit

        GNU Emacs est plus confortable, car au moins vous devez choisir dans quel vérificateur de langage de programmation vous voulez travailler (si vous ne voulez pas plus de poids pour votre processeur, utilisez GNU Nano et profitez du minimalisme à son meilleur).

        1.    marianogaudix dit

          Elio, nous parlons de WordPress. Implémenté sur le blog Desde Linux. Il n'a pas pour fonction de colorer les lettres des messages.

          1.    éliotime3000 dit

            Oh je suis désolé.

        2.    pandev92 dit

          Naaa emacs est confortable pour ceux qui ont 84 doigts XD .., les gens normaux, textmate, sublimetext ou notepad ++ xd

          1.    éliotime3000 dit

            La chose invraisemblable est de ne pas avoir appris à taper, ce qui est nécessaire pour être capable de bien gérer GNU Emacs et ses raccourcis clavier. De plus, son interface graphique vous facilite l'utilisation de ses menus (il peut être utilisé sous Windows, mais il n'est pas recommandé de le faire avec le mode normal mais avec le mode invite de commande pour que win32 ne boycotte pas votre script).

  4.   Carper dit

    Tutoriel très cool. Mais au fait, le code source python n'est pas compilé, c'est un langage interprété.

    1.    giskard dit

      Il peut être compilé en pseudo-code. Ce n'est pas un langage machine mais des octets qui représentent quelque chose pour l'interpréteur, mais le processus est également appelé compilé. En ce sens, il est possible de dire que quelque chose est compilé.

  5.   hty dit

    Peut-être vaut-il mieux apprendre pytgk2 car la dernière version disponible pour Windows est la 2.24. La série 3 brille par son absence. Et les mauvaises langues disent que gnome casse tous les apis dans chaque nouvelle version.

    1.    marianogaudix dit

      Je programme une maquette avec GTK 3.4 / 3.6 et la vérité est qu'ils vous brisent la patience et la tête, vous devez réécrire le code, maintenant je comprends pourquoi les gens de Linux Mint se plaignent de GTK et du projet GNOME.
      Pour ceux de MINT, je suis d'accord avec GTK 2.4 cela ne s'est pas produit.

  6.   Carlos dit

    Bon tutoriel et références.
    Juste un détail, puisque le code a été inséré, en Python les indentations sont obligatoires et doivent être respectées dans l'exemple de code.

    Salutations!

    1.    marianogaudix dit

      Pouvez-vous nous expliquer en quoi consistent les identifications obligatoires en Python? Je vous dis la vérité, je n'ai jamais entendu cela.Je suis très habitué aux forums PyGTK 2/3 en anglais et peut-être que je les néglige.

      1.    giskard dit

        En Python, vous n'utilisez pas de clés comme en C ou de blocs de début / fin comme en Pascal, mais tout est compris à travers l'indentation que vous donnez au code. Autrement dit, les blocs sont reconnus comme étant indentés. C'est une fonctionnalité que j'aime particulièrement. Vous évitez d'écrire des clés et des choses comme ça.

        1.    pandev92 dit

          Je n'aime juste pas ça, il semble plus simple de mettre deux petites touches ou un std :: endl;, que d'être vu si la ligne xd est bien tabulée

          1.    felipe dit

            : p Votre professeur de programmation mettra un 0 pour vous. Ou pire, ils vous licencieront de votre travail. Ce qui compte le plus, c'est que le code soit lisible avec tout ce que cela implique

          2.    pandev92 dit

            se terminant par des accolades fermantes, cela me rend XD beaucoup plus lisible.

          3.    giskard dit

            Sérieusement???


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

            Vous voyez? Sans indentations, ce n'est pas très bien compris. Et c'est facile. Avec un plus complexe, seul le compilateur le comprend. Le fait est que, puisque vous DEVEZ de toute façon indenter (pour que les humains comprennent le code), pourquoi serait-il redondant et utiliser des séparateurs? Assez d'indentation et c'est tout.

          4.    pandev92 dit

            Bien sûr, rien n'est compris, car vous ne respectez pas les règles de bonne écriture pour un programme c / c ++. Ce que vous avez fait est valable pour tout, comme l'imbrication d'une fonction, à l'intérieur d'une fonction à l'intérieur d'une autre fonction qui est à l'intérieur d'une autre, alors je veux vous voir xd si vous êtes capable de le comprendre.

          5.    pandev92 dit

            au fait, avec deux regards, ce code est facilement compréhensible xD

          6.    giskard dit

            Ce que j'ai fait, je l'ai fait exprès pour vous montrer que sans indentation, même si elle compile, il est extrêmement difficile de comprendre un code. Vous avez donc 2 règles: indenter et englober avec des délimiteurs. Mais c'est redondant. En Python, un tel code n'est tout simplement pas accepté par l'interpréteur. Et vous n'avez qu'une seule règle: le retrait. Facile.
            Mais bon, chacun avec ses goûts.

          7.    Athéyus dit

            Les deux sont bons, le indenté et le non-indenté, à mon avis je préfère le style point-virgule ou rubis, similaire au python mais l'indentation n'est pas nécessaire.

            C'est ainsi qu'il est mieux compris: P:

            echo 'int main (int argc, char * argv []) {nom_programme = argv [0]; while ((argc> 1) && (argv [1] [0] ==' - ')) {switch (argv [ 1] [1]) {cas 'v': verbeux = 1; break; case 'o': out_file = & argv [1] [2]; break; case 'l': line_max = atoi (& argv [1] [2]); break; par défaut: fprintf (stderr, »Mauvaise 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 -e 's / \ {/ \ {\ n \ t / g; s / \; / \; \ n \ t / g; s / \ t \} / \} / g;'

            Salutations 😀

      2.    giskard dit

        Je pense que Carlos veut dire que là où le code sort, il n'y a pas de retrait. Cela ne fonctionnera pas avec le copier-coller. Je ne sais pas si le tag existe lors de la création d'un post pour saisir le code de langue. Ce serait bien qu'ils le mettent si cela n'existe pas.

        1.    giskard dit

          J'ai déjà vu quel est le problème: la balise CODE supprime tous les espaces et tabulations (elle ne devrait pas faire ça !!!) Mais si vous mettez un nbsp dessus, le code semble bon. A0 en hexadécimal (160 en déc) bien que je pense que cela puisse dépendre de la police (je ne sais pas). S'il est utilisé, il se présente comme suit:

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

          Que dans mes tests ça a l'air bien, mais je n'ai pas d'aperçu quand je poste des réponses (et il devrait y en avoir !!!) Si ça ne sort pas, ce n'est pas ma faute culpa

          1.    marianogaudix dit

            Regardez les exemples que Sebastian Pölsterl donne dans son tutoriel PyGTK 3, Sebastian ne place pas d'étiquettes.

            Exemple :

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

            vous pouvez voir tout le tutoriel de Sebastian.

          2.    giskard dit

            Je ne sais pas a quoi tu fait référence. Ce que je dis, c'est qu'ici, dans les messages, il n'est pas possible d'utiliser la balise HTML "CODE" pour que ce que vous mettez comme code et qu'il ressorte bien en retrait. Sur la page que vous référez, si vous regardez les sources de la page, vous verrez qu'elle n'utilise pas CODE mais utilise d'autres délimiteurs HTML.
            Ce n'est pas contre le code que vous avez inséré mais plutôt pour signaler une faille dans le système de publication de ce site. Ce que, peut-être, les administrateurs peuvent résoudre.
            Quand je parle de balises, je parle évidemment de HTML, pas de Python. Dans tous les cas, si vous mettez du code sans indentation en Python, cela ne fonctionnera tout simplement pas. Si un débutant vient et copie le code tel qu'il apparaît dans cet article et essaie de l'exécuter, il échouera. Vous pouvez être frustré car vous êtes un débutant. Encore une fois, la faute n'est pas la vôtre; et dans ma réponse précédente immédiate, ce que j'ai fait était de donner un moyen de résoudre le problème à partir du niveau de l'utilisateur qui publie.

          3.    marianogaudix dit

            Vous avez absolument raison, j'aurais dû télécharger des photos au lieu de copier le code.
            pour montrer comment les instructions sont correctement ordonnées dans PyGTK 3.

  7.   felipe dit

    Pour programmer avec python je recommande d'utiliser Eclipse avec le plugin PyDev, ou Pychar m

  8.   Louis dit

    Comme commenté ci-dessus, c'est exactement pourquoi je n'aime pas python, à cause du problème d'indentation. Comme nous l'avons vu, faire du copier-coller ne fonctionnera pas, ce qui ne se produit pas avec d'autres langages tels que C, Java, PHP, etc.

    La chose de la lisibilité, nous appliquons un embellisseur de code (comme http://indentcode.net/ ) et prêt,

    Le moche est fixe, mais s'il n'y a pas d'indentation et que la logique est altérée, on sonne ..

  9.   Carlos dit

    Je suis nouveau sur PyGTK, est-il possible d'interagir avec des scripts shell dans ce langage?

    1.    Salut dit

      Merci pour le tutoriel.

      Salutations.