Interfaces graphiques pour Python avec wxPython.pdf

(2108 KB) Pobierz
Interfaces graphiques
pour
Python
avec
Alain Delgrange
"La connaissance utile, c'est celle qu'on partage..."
Page 1 / 42
Sommaire
Introduction.................................................................................................................................4
Pré-requis....................................................................................................................................4
Premier programme (Bonjour tout le monde)..............................................................................4
Fichier : Exemple1.py..............................................................................................................5
Ligne 01..............................................................................................................................5
Ligne 02..............................................................................................................................5
Ligne 04..............................................................................................................................5
Lignes 06 à 11....................................................................................................................6
Lignes 13 à 18..................................................................................................................10
Lignes 20 et 21.................................................................................................................10
Gérer les évènements................................................................................................................12
Fichier : Exemple2.py............................................................................................................12
Lignes 09, 10 et 11...........................................................................................................13
Ligne 12............................................................................................................................13
Lignes 14 à 16..................................................................................................................14
Fichier : Exemple3.py............................................................................................................15
Utilisation des boites de placement (sizers)...............................................................................16
wx.BoxSizer...........................................................................................................................16
Fichier : Exemple4.py........................................................................................................17
Ligne 09............................................................................................................................18
Ligne 10............................................................................................................................18
Ligne 13............................................................................................................................18
Ligne 14............................................................................................................................18
Ligne 15............................................................................................................................19
Ligne 16............................................................................................................................19
Ligne 17............................................................................................................................19
Fichier : Exemple5.py........................................................................................................19
wx.GridSizer..........................................................................................................................21
Fichier : Exemple7.py........................................................................................................21
Les Menus..................................................................................................................................22
Fichier : Exemple8.py............................................................................................................22
Ligne 9..............................................................................................................................23
Lignes 10, 11 et 13...........................................................................................................23
Ligne 12............................................................................................................................24
Ligne 14............................................................................................................................24
Ligne 15............................................................................................................................24
Ligne 16............................................................................................................................24
Lier les éléments d'un menu à des méthodes............................................................................25
Fichier : Exemple9.py............................................................................................................25
Page 2 / 42
Lignes 11, 12 et 14...........................................................................................................26
Ligne 20............................................................................................................................26
Ligne 21............................................................................................................................26
Ligne 22............................................................................................................................26
Ligne 23............................................................................................................................27
Lignes 25 à 27..................................................................................................................27
Lignes 29 à 36..................................................................................................................27
Construisons une véritable application......................................................................................27
Code de l'application :......................................................................................................28
Les variables globales................................................................................................................31
Lignes 6 et 7.....................................................................................................................31
Lignes 9 à 13....................................................................................................................32
Construction de la fenêtre principale.........................................................................................32
La barre d'outils ...................................................................................................................32
Ligne 80............................................................................................................................32
Lignes 82 à 107................................................................................................................32
Ligne 108..........................................................................................................................33
Ligne 109..........................................................................................................................33
Le corps de la fenêtre............................................................................................................34
La classe Visu............................................................................................................................34
La classe wx.ScrolledWindow................................................................................................34
La méthode Affiche().............................................................................................................34
Lignes 25 à 31..................................................................................................................35
Lignes 32 à 37..................................................................................................................35
Mise en oeuvre des fonctionnalités............................................................................................35
La méthode OnOpen(self, evt)...............................................................................................35
La méthode Plus(self, evt).....................................................................................................39
La méthode Moins(self, evt)..................................................................................................40
La méthode Retour(self, evt).................................................................................................41
La méthode OnClose(self, evt)..............................................................................................41
La méthode OnExit(self, evt).................................................................................................41
La classe App()..........................................................................................................................41
Conclusion.................................................................................................................................42
Licence .....................................................................................................................................42
Page 3 / 42
Introduction
wxPython est une collection de modules Python réalisée sur la base des wxWidgets de
wxWindows, un framework multi-plateformes écrit en C++.
wxPython met à disposition des développeurs un nombre impressionnant de classes
permettant de réaliser des interfaces homme machine (IHM) complètement indépendantes de l'
OS sur lequel ils sont mis en oeuvre.
Mais au delà, d'une simple IHM, wxPython fournit également des classes de haut niveau aussi
diverses que les sockets réseau, le traitement de l'image ou encore l'interprétation HTML ou
XML.
Le seul inconvénient que j'ai pu trouver dans wxPython, c'est la difficulté, notamment pour
quelqu'un qui connaît mal l'anglais, d'en approcher la documentation, qui, bien que très
complète, est particulièrement mal adaptée à l'apprentissage.
Le but de ce tutoriel n'est donc pas de décrire l'ensemble des classes wxPython, mais plutôt de
donner des clés permettant au débutant de comprendre la philosophie des wxWidgets, et de
naviguer facilement dans leur documentation.
Ce tutoriel n'est pas non plus destiné à enseigner Python, dont la connaissance est un préalable
pour pouvoir aborder wxPython.
Tout au long de mes exemples, je vous renverrai sur la documentation anglaise extrêmement
bien construite des wxWidgets. Vous verrez qu'à force, vous parviendrez à vous y retrouver, et
en ferez peu à peu votre référence unique, bien que celle-ci soit réalisée à destination des
programmeurs en C++.
Il existe bien une documentation des classes spécifique à Python, mais moins bien articulée, et
qui ne sera réellement utile qu'aux programmeurs connaissant déjà bien le produit.
Pré-requis
Vous devez avoir Python installé sur votre machine (personnellement c'est la version 2.4).
Vous devez récupérer wxPython que vous trouverez sur le site
http://www.wxpython.org.
Faites
attention de bien récupérer la version de wxPython qui correspond à celle du Python installé
sur votre machine.
Pour l'installation, utilisez la procédure qui correspond à votre système d'exploitation.
Sous MS Windows l'installation est simplifiée par un programme qui automatise les procédures.
Sous linux, il existe des packages pré-compilés pour les plus courantes des distributions.
Personnellement, je travaille avec la distribution Ubuntu Hoary basée sur la Debian, et le
système d'installation très performant de cette distribution est complètement transparent pour
l'utilisateur.
Pour le codage, on peut utiliser un éditeur de texte courant.
Personnellement j'utilise tout simplement Idle qui est fourni avec Python.
Premier programme (Bonjour tout le monde)
Je ne résisterai pas au plaisir de vous initier au toujours populaire «Bonjour tout le monde !» («
Hello world ! » en anglais) que tout enseignant d'un langage informatique se fait un devoir de
servir à ses élèves...
Nous allons utiliser quatre classes de wxPython pour réaliser cet exemple:
La classe
Frame
qui fournit une fenêtre classique.
La classe
Panel
qui fournit un conteneur polyvalent pour y déposer des contrôles.
La classe
StaticText
qui fournit une étiquette sur laquelle on peut afficher du texte.
La classe
App
qui est la classe de base de toute application wxPython.
Page 4 / 42
Fichier : Exemple1.py
01 # !/usr/bin/python 
02 # ­*­ coding: iso­8859­15 ­*­
03 
04 import wx 
05  
06 class Bonjour(wx.Frame): 
07   def __init__(self, titre): 
08     wx.Frame.__init__(self, None, ­1, title = titre, size = (200, 100)) 
09     conteneur = wx.Panel(self, ­1, size = self.GetClientSize()) 
10     etiquette = wx.StaticText(conteneur, ­1, "Bonjour tout le monde !",
 style = wx.ALIGN_CENTRE) 
11     etiquette.CentreOnParent()   
12  
13 class MonApp(wx.App): 
14   def OnInit(self): 
15     fen = Bonjour("Exemple 1") 
16     fen.Show(True) 
17     self.SetTopWindow(fen) 
18     return True   
19  
20 app = MonApp()
21 app.MainLoop()
Résultat à l'exécution :
Le visuel de cette fenêtre peut être très différent sur votre machine, selon que son OS est MS
Windows, Linux (selon le thème du bureau), ou MAC OS. La capture qui précède a été réalisée
sous Linux Ubuntu Hoary en environnement gnome.
Décortiquons un peu ces lignes de code :
Ligne 01
Cette ligne est indispensable sous Linux pour indiquer à l'OS où se situe l'interpréteur Python,
et pour permettre un lancement du script par double-clic.
Ligne 02
Cette ligne permet de faire prendre en compte par l'interpréteur les accentués et le sigle € .
Ces deux premières lignes figurent toujours en début de mes scripts Python.
Ligne 04
Depuis la version 2.4 de wxPython, l'espace de nom du module a changé, et se nomme tout
simplement wx (l'ancien espace de nom – wxPython.wx – n'a été maintenu que pour assurer la
compatibilité ascendante). Il suffit donc d'importer wx pour accéder aux wxWidgets. On
Page 5 / 42
Zgłoś jeśli naruszono regulamin