Outils graphiques pour PYTHON
Interface graphique pour Python
Avec Python
Architecture de PyGTK
PyGTK est une des multiples possibilités de faire de la programmation d'interface graphique en Python. A concurrence égale, on trouve également wxwidget. PyGTK est bien conçu, dispose d'un excellent tutoriel et d'une installation simplifiée pour windows. Sous linux, pas de problème d'installation, gtk utilisé par PyGTK est natif pour les environnements Gnome.
Exemple Helloworld
Description de l'exemple :
Le but de cet exemple est de créer une fenêtre aux dimensions minimales données, lorsque l'on clique sur la croix, la fenêtre se ferme et on quitte l'application.
Cette fenêtre propose un bouton, cliquable, qui lors de la réception de l'événement clic gauche, affiche un message sur la sortie standard.
import gtk, pygtk import sys class HelloWorldGUI: def __init__(self): self.__draw() def __draw(self): self.window=gtk.Window(gtk.WINDOW_TOPLEVEL) self.window.set_title("Hello world") self.window.connect("destroy", self.__on_quit) self.button=gtk.Button(stock=gtk.STOCK_CONNECT) self.button.connect("clicked", lambda w: sys.stdout.write("Connect python\n")) self.window.add(self.button) self.window.resize(200, 100) def __on_quit(self, widget): gtk.main_quit() def start(self): self.window.show_all() gtk.main() if __name__ == '__main__': h=HelloWorldGUI() h.start()
Voici le rendu graphique de cet exemple sur un PC windows avec GTK installé.
Avec Jython
Architecture de Swing avec Jython
JAVA ayant pour objectif de devenir une machine virtuelle universelle, le langage Python s'y est adapté.
Au même titre que sur environnement Linux où Python utilise GTK pour son interface graphique, sur environnement Java, Python va utiliser Swing et AWT.
Un des intérêts de cette méthode est de développer la partie graphique d'une application sur un environnement stable (Swing) et de concentrer la partie métier en Python, ce qui peut être très utile dans une phase de test en amont d'un développement d'une version livrable. Le Python étant entre 2 à 10 fois plus rapide à développer que le Java.
Jython est une implémentation de Python en Java et à ce titre, le Python écrit pour cette plateforme pourra accéder à toute l'API Java sous-jacente.
Exemple Helloworld
Dans un but didactique, nous reprenons ici exactement le même exemple que dans la section précédente sur PyGTK, mais cette fois ci en faisant appel à l'API Java et en particulier Swing.
from java import awt from javax import swing import sys class HelloWorldGUIJPY: def __init__(self): self.__draw() def __draw(self): self.window=swing.JFrame("Hello world Jython") self.window.setDefaultCloseOperation(swing.JFrame.EXIT_ON_CLOSE) self.button=swing.JButton("Connect", actionPerformed = self.do_connect) self.window.setSize(200, 100) self.window.add(self.button) def do_connect(self, event=None): print "Connect Java Python" def start(self): self.window.setVisible(1) if __name__ == '__main__': h=HelloWorldGUIJPY() h.start()
Voici le rendu graphique de cet exemple sur un PC windows avec Java 1.5.
Avec un builder
Chaine de fonctionnement de Glade pour PyGTK
Pour simplifier l'écriture d'interfaces graphiques en PyGTK, on peut utiliser un builder d'interface.
Glade est disponible à la fois pour Windows et Linux.
Voici un aperçu de son mode de fonctionnement. Le fichier Simple-glade-codegen.py est disponible dans l'archive des exemples,
ainsi que SimpleGladeApp.py (Son emplacement sur le web n'est pas stable en ce moment (2007)).
Exemple Helloworld
Pour cette troisième partie, nous reprenons à nouveau le même exemple.
Tout d'abord, voici le fichier xml de description de notre fenêtre HelloWorld. Ce fichier est généré par Glade. Quelques lignes ont été enlevées par souci de clarté.
<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
<glade-interface>
<widget class="GtkWindow" id="window1">
<property name="title" translatable="yes">Hello world with glade</property>
<property name="visible">True</property>
<property name="default_width">200</property>
<property name="default_height">100</property>
<property name="resizable">True</property>
<signal name="destroy" handler="gtk_main_quit"/>
<child>
<widget class="GtkButton" id="button1">
<property name="visible">True</property>
<property name="label">gtk-connect</property>
<signal name="clicked" handler="on_buttonconnect_clicked"/>
</widget>
</child>
</widget>
</glade-interface>
Et maintenant voici le fichier Python généré à partir du xml. C'est dans ce fichier que nous complétons les actions à effectuer lors d'une capture d'événement.
import os import gtk from SimpleGladeApp import SimpleGladeApp glade_dir = "" class Window1(SimpleGladeApp): def __init__(self, path="helloworld.glade", root="window1", domain=None, **kwargs): path = os.path.join(glade_dir, path) SimpleGladeApp.__init__(self, path, root, domain, **kwargs) def new(self): #context Window1.new { print "A new Window1 has been created" #context Window1.new } def on_buttonconnect_clicked(self, widget, *args): #context Window1.on_buttonconnect_clicked { print "Connect from glade hello world" #context Window1.on_buttonconnect_clicked } def main(): window1 = Window1() window1.run() if __name__ == "__main__": main()
Voici le rendu graphique de cet exemple sur un PC windows avec GTK installé. Soit la même chose que sur le premier exemple.
- Ingénieurs 2000 - Informatique/Réseaux 3ème année - 2007