| PyGTK |
UserPreferences |
| Wiki Python Fr | FrontPage | RecentChanges | TitleIndex | WordIndex | SiteNavigation | HelpContents | moin.sf.net |
GTK+ est libre (licence GNU LGPL) et multi-plateforme.
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
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #!/usr/bin/env 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:
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 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #!/usr/bin/env 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()
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 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | #!/usr/bin/env 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.