[PageD'Accueil] [IndexDesTitres] [IndexDesTermes

Généralités

GTK+ (The GIMP Tool Kit) est un ensemble de bibliothèques logicielles (c'est-à-dire un ensemble de fonctions informatiques) développé originellement pour les besoins du logiciel de traitement d'images The GIMP et utilisé également pour le développement des environnements de bureau GNOME, Xfce et ROX.

GTK+ est libre (licence GNU LGPL) et multi-plateforme.

Installation sous windows

Sur le site gladewin32 se trouve deux paquetages :

  1. The Gtk+/Win32 Development Environment (GDE)
  2. The Gtk+/Win32 Runtime Environment (GRE)

Le GDE contient tout ce qu'il faut pour développer en C (inutile pour pygtk), mais également glade. Glade est un outil qui permet de créer des interfaces à la souris qui seront sauvegardées dans des fichiers xml. La bibliothèque libglade permet de reconstruire ces interfaces à l'exécution d'un programme. Pygtk permet d'utiliser cette fonctionnalité.

Sur le site gtk win32, récupérer le module pygtk

Tutoriaux

PyGTK et Glade

Instructions pas à pas pour un programme "Hello World" avec Python, gtk, pygtk (que Debian appele python-gtk), et libglade. 1ère étape

Maintenant, la chose la plus importante à se souvenir quand vous utilisez glade est que GTK utilise un modèle basé sur les conteneurs. Toutes la zone grisée que vous voyez peut contenir exactement un widget. Alors, tout ce que vous avez à faire avec la fenêtre que vous avez créée est de choisir un widget de la fenêtre Palette et de le déplacer dans votre fenêtre application. Si vous ne positionnez pas de containeur (Boite Horizontale, Boite Verticale, Table, ou Fixed Positions) qui peuvent contenir plusieurs widgets, vous ne pouvez pas ajouter de widgets.

Pour notre exemple, nous allons juste afficher "Hello World" (oui, c'est ennuyeux, mais c'est une première étape nécessaire), alors, nous allons insérer un label.

Au cas ou vous vous le demanderiez, glade n'a pas de concept "accepter ce que j'ai fait". Tout ce que vous faites arrivent quand vous le faite, et il n'y a pas d'annulation possible. Sauver rapidement, sauver souvent.

Vous venez de créer le fichier glade. Le mien est appelé pyglade.glade. Créons maintenant le programme Python qui va activer le fichier.

import gtk
import gtk.glade

# Nous mettons tous nos handlers des signaux gtk dans une
# classe. Ceci nous permet de les lier tous en une seule fois car leurs noms
# sont dans le dictionnaire de la classe.
class GladeHandlers:
        pass

class WidgetsWrapper:
    def __init__(self):
        self.widgets = gtk.glade.XML('pyglade.glade', "window1")
        self.widgets.signal_autoconnect(GladeHandlers.__dict__)

    def __getitem__(self, key):
        """Ceci nous donne la possibilité de faire : widgets['widget_name'].action()"""
        return self.widgets.get_widget(key)

if __name__ == '__main__':
    widgets = WidgetsWrapper()

    gtk.main()

Modifions le programme pour qu'il ait un bouton quitter. 2ème étape

Voici pyglade1.py, qui gère le bouton quit :

import gtk
import gtk.glade

# Nous mettons tous nos handlers des signaux gtk dans une
# classe. Ceci nous permet de les lier tous en une seule fois car leurs noms
# sont dans le dictionnaire de la classe.
class GladeHandlers:
    def on_quit_clicked(event):
        gtk.main_quit()

class WidgetsWrapper:
    def __init__(self):
        self.widgets = gtk.glade.XML('pyglade1.glade', "window1")
        self.widgets.signal_autoconnect(GladeHandlers.__dict__)

    def __getitem__(self, key):
        """Ceci nous donne la possibilité de faire : widgets['widget_name'].action()"""
        return self.widgets.get_widget(key)

if __name__ == '__main__':
    widgets = WidgetsWrapper()

    gtk.main()

Voici le code python :

import gtk
import gtk.glade

# Nous mettons tous nos handlers des signaux gtk dans une
# classe. Ceci nous permet de les lier tous en une seule fois car leurs noms
# sont dans le dictionnaire de la classe.
class GladeHandlers:
    def on_quit_clicked(event):
        gtk.main_quit()

    def on_button2_clicked(event):
        widgets['label1'].set_text("spam, spam, spam")

class WidgetsWrapper:
    def __init__(self):
        self.widgets = gtk.glade.XML('pyglade2.glade', "window1")
        self.widgets.signal_autoconnect(GladeHandlers.__dict__)

    def __getitem__(self, key):
        """Ceci nous donne la possibilité de faire : widgets['widget_name'].action()"""
        return self.widgets.get_widget(key)

if __name__ == '__main__':
    widgets = WidgetsWrapper()

    gtk.main()

Faites des essais sur le programme et jouer avec glade. La libglade crée les widgets pour vous, vous pouvez donc inserer des widgets sans écrire de code python pour gérer leurs signaux. Par exemple, si vous voulez mettre vbox1 dans un widget frame, vous pouvez le faire sans changer le code python. Ou vous pouvez changer l'ordre des widgets dans vbox1. Ou créer plus de vboxe et hboxe, et mettre les widgets ou vous voulez. Ils sont identifié par leur nom et pas par leur position ou par hiérarchie.

Une remarque cependant, les icones Gnome ne sont pas supportées dans pygtk, alors si vous paramétrez un bouton comme Stock Button, ou si vous insérez une barre d'outils avec boutons, pygtk n'est pas capable d'assurer un bon rendu.

Divers liens utiles :

Les archives de la mailing list pygtk sont interrogeables et comportent souvent des réponses de James Henstridge.


2016-06-05 21:43