Introduction
Table des matières
- Introduction
- Installation de wxPython
- Débuter avec wxPython
- Créer une fenêtre avec wxPython
- Mettre du texte statique avec wxPython
- Créer un bouton avec wxPython
- Créer un menu avec wxPython
- Créer un curseur (slider) avec wxPython
- Créer un bouton fléché (spinner)
- Créer des cases à cocher (check box)
- Créer une "list box" avec wxPython
- Créer une boite de dialogue avec wxPython
- Tutoriels pour apprendre wxPython
- Apprendre wxPython par l'exemple
- Références
C'est quoi wxPython ?: wxPython est une bibliothèque python permettant la création d'interfaces graphiques ou GUI (signifiant: "Graphic User Interface). Sous python il existe de nombreux GUI comme TkInter ou encore PyQt
(voir la liste: Python GUIs).
La bibliothèque wxPython possède des avantages très intéressants, tout d'abord elle est relativement simple à apprendre et à maitriser (surtout comparé au langage Java), il est possible de réaliser des GUI assez complexes et variés, possibilité d'utiliser comme nous le verrons d'autres
bibliothèques de python (ce qui est un énorme avantage quand on connait la richesse des bibliothèques python !) et pour terminer wxPython est multi-platforme (autrement-dit, vous pouvez réaliser des applications qui marcheront sur Mac, Windows, etc). What else !
Dans ce tutoriel d'introduction, on va parcourir les fonctionnalités de base
de wxPython sans entrer dans les détails. L'objectif étant de donner un aperçu général de wxPython et de pouvoir rapidement développer de simples interfaces graphiques. Dans les articles sous-jacents nous aborderons des notions plus complexes. Deux références principales ont été utilisées pour cette introduction: un très bon tutoriel an anglais: wxPython Tutorial (avec des exemples variés: wxPython Tutorial Examples) et une série de video sur youtube toujours en anglais: video tutorial wxPython.
Note: Pour ce tutoriel les images proviennent de scripts python exécutés a partir d'un Mac. Il est important de savoir que l'apparence graphique de vos applications dépend du système d'exploitation sur lequel vous lancez vos scripts. Il est donc parfaitement normal d'avoir des résultats différents.
Installation de wxPython
Verifier tout d'abord que wxPython n'est pas déjà installée sur votre système. Pour cela, lancez python puis tapez tout simplement: import wx.
Si python affiche: "No module named wx" c'est que wxPython n'est pas
installée.
Pour installer wxPython, rendez vous sur la page: Download wxPython et suivez les instructions.
Il faut aussi mentionner que wxPython est disponible dans la version gratuite EPD de Enthought. Donc si vous voulez installer wxPython et par la même occasion
un ensemble de bibliothèques python préférez plutôt cette solution.
Vous pouvez aussi consulter les liens suivants:
video installation wxPython et
video showmedo sur l'installation de wxpython
Débuter avec wxPython
Créer une fenêtre avec wxPython
import wx
class MyFrameName(wx.Frame):
def __init__(self,parent,id): # constructeur de fonction
wx.Frame.__init__(self,parent,id,'Hello World !',size=(300,200))
if __name__=='__main__':
app=wx.PySimpleApp()
frame=MyFrameName(parent=None,id=-1)
frame.Show()
app.MainLoop()
Mettre du texte statique avec wxPython
# -*- coding: utf-8 -*-
import wx
class MyFrameName(wx.Frame):
def __init__(self,parent,id): # constructeur de fonction
wx.Frame.__init__(self,parent,id,'Hello World !',size=(800,600))
self.panel = wx.Panel(self)
wx.StaticText(self.panel,-1,"Texte",(130,60))
custum=wx.StaticText(self.panel,-1,"Texte",(130,100))
custum.SetForegroundColour('white')
custum=wx.StaticText(self.panel,-1,"Texte",(130,140))
custum.SetForegroundColour('red')
custum=wx.StaticText(self.panel,-1,"Texte",(130,180))
custum.SetForegroundColour('green')
custum=wx.StaticText(self.panel,-1,"Texte",(130,220))
custum.SetForegroundColour('blue')
custum=wx.StaticText(self.panel,-1,"Texte centré",(430,60),(260,30),wx.ALIGN_CENTER)
custum.SetBackgroundColour('blue')
custum=wx.StaticText(self.panel,-1,"Texte centré",(430,100),(260,30),wx.ALIGN_CENTER)
custum.SetBackgroundColour('red')
custum=wx.StaticText(self.panel,-1,"Texte aligné à gauche",(430,140),(260,30), \
wx.ALIGN_LEFT)
custum.SetBackgroundColour('red')
custum.SetForegroundColour('white')
custum=wx.StaticText(self.panel,-1,"Texte aligné à droite",(430,180),(260,30), \
wx.ALIGN_RIGHT)
custum.SetBackgroundColour('red')
if __name__=='__main__':
app=wx.PySimpleApp()
frame=MyFrameName(parent=None,id=-1)
frame.Show()
app.MainLoop()
Créer un bouton avec wxPython
import wx
class MyFrameName(wx.Frame):
def __init__(self,parent,id): # constructeur de fonction
wx.Frame.__init__(self,parent,id,'Hello World !',size=(800,600))
self.panel = wx.Panel(self)
button=wx.Button(self.panel,label="exit",pos=(130,10),size=(60,60))
self.Bind(wx.EVT_BUTTON, self.closebutton, button)
def closebutton(self,event):
self.Close(True)
if __name__=='__main__':
app=wx.PySimpleApp()
frame=MyFrameName(parent=None,id=-1)
frame.Show()
app.MainLoop()
Creer un bouton bitmap:
Icons
import wx
class MyFrameName(wx.Frame):
def __init__(self,parent,id): # constructeur de fonction
wx.Frame.__init__(self,parent,id,'Hello World !',size=(800,600))
self.panel = wx.Panel(self)
pic=wx.Bitmap("./glyphicons_free/glyphicons/png/glyphicons_192_circle_remove.png", \
wx.BITMAP_TYPE_ANY)#.ConvertToBitmap()
self.button=wx.BitmapButton(self.panel, -1, pic, pos=(130,10))
self.Bind(wx.EVT_BUTTON,self.closebutton, self.button)
self.button.SetDefault()
def closebutton(self,event):
self.Close(True)
if __name__=='__main__':
app=wx.PySimpleApp()
frame=MyFrameName(parent=None,id=-1)
frame.Show()
app.MainLoop()
Créer un menu avec wxPython
import wx
class MyFrameName(wx.Frame):
def __init__(self,parent,id): # constructeur de fonction
wx.Frame.__init__(self,parent,id,'Hello World !',size=(800,600))
self.panel = wx.Panel(self)
status=self.CreateStatusBar()
menubar=wx.MenuBar()
first=wx.Menu()
second=wx.Menu()
menubar.Append(first,"File")
first.Append(101,"New","New File")
first.Append(102,"Open...","Open new file")
menubar.Append(second,"Edit")
self.SetMenuBar(menubar)
self.Bind(wx.EVT_MENU, self.dosomething, id=101)
def dosomething(self, event):
wx.StaticText(self.panel,-1,"Hello menu, what's up",(130,60))
if __name__=='__main__':
app=wx.PySimpleApp()
frame=MyFrameName(parent=None,id=-1)
frame.Show()
app.MainLoop()
Créer un curseur (slider) avec wxPython
import wx
class MyFrameName(wx.Frame):
def __init__(self,parent,id): # constructeur de fonction
wx.Frame.__init__(self,parent,id,'Hello World !',size=(800,600))
self.panel = wx.Panel(self)
self.slider_01=wx.Slider(self.panel, -1, 50, 1, 100, pos=(50,50), size=(250,-1), \
style=wx.SL_AUTOTICKS | wx.SL_LABELS)
self.slider_01.SetTickFreq(5,1)
self.slider_01.SetDimensions(200, 100, 250, -1)
self.slider_02 = wx.Slider(self.panel, 101, 27, 0, 100, pos=(50,50), size=(250,-1), \
style=wx.SL_VERTICAL | wx.SL_AUTOTICKS | wx.SL_LABELS )
self.slider_02.SetDimensions(500, 300, -1, 250)
self.Bind(wx.EVT_SCROLL, self.dosomething, id=101)
def dosomething(self, event):
if self.slider_02.GetValue() == 75:
wx.StaticText(self.panel,-1,"Slider hits 75",(320,320))
#print self.slider_02.GetValue()
if __name__=='__main__':
app=wx.PySimpleApp()
frame=MyFrameName(parent=None,id=-1)
frame.Show()
app.MainLoop()
Note:
Créer un bouton fléché (spinner)
import wx
class MyFrameName(wx.Frame):
def __init__(self,parent,id): # constructeur de fonction
wx.Frame.__init__(self,parent,id,'Hello World !',size=(800,600))
self.panel = wx.Panel(self)
self.myspinner=wx.SpinCtrl(self.panel, 101, "", (40,40), (90,-1))
self.myspinner.SetRange(1,100)
self.myspinner.SetValue(60)
self.Bind(wx.EVT_SPINCTRL, self.dosomething, id=101)
def dosomething(self, event):
if self.myspinner.GetValue() == 75:
wx.StaticText(self.panel,-1,"Slider hits 75",(40,80))
#print self.slider_02.GetValue()
if __name__=='__main__':
app=wx.PySimpleApp()
frame=MyFrameName(parent=None,id=-1)
frame.Show()
app.MainLoop()
Note:
Créer des cases à cocher (check box)
import wx
class MyFrameName(wx.Frame):
def __init__(self,parent,id): # constructeur de fonction
wx.Frame.__init__(self,parent,id,'Hello World !',size=(800,600))
self.panel = wx.Panel(self)
self.myCheckBox01 = wx.CheckBox(self.panel, 101, "Pomme", (20,20), (160,-1))
self.myCheckBox02 = wx.CheckBox(self.panel, 102, "Poire", (20,40), (160,-1))
self.myCheckBox03 = wx.CheckBox(self.panel, 103, "Banane", (20,60), (160,-1))
button=wx.Button(self.panel,label="Go",pos=(20,100),size=(60,60))
self.Bind(wx.EVT_BUTTON, self.checkfunction, button)
def checkfunction(self,event):
print "Pomme", self.myCheckBox01.IsChecked()
print "Poire", self.myCheckBox02.IsChecked()
print "Banane", self.myCheckBox03.IsChecked()
if __name__=='__main__':
app=wx.PySimpleApp()
frame=MyFrameName(parent=None,id=-1)
frame.Show()
app.MainLoop()
Note:
Créer une "list box" avec wxPython
import wx
class MyFrameName(wx.Frame):
def __init__(self,parent,id): # constructeur de fonction
wx.Frame.__init__(self,parent,id,'Hello World !',size=(800,600))
self.panel = wx.Panel(self)
self.mylist=['Pomme','Poire','Banane','Citron','Tomate']
self.myListBox=wx.ListBox(self.panel, -1, (20,20), (120,90), self.mylist, wx.LB_SINGLE)
self.myListBox.SetSelection(3)
button=wx.Button(self.panel,label="Go",pos=(20,130),size=(60,100))
self.Bind(wx.EVT_BUTTON, self.checkfunction, button)
def checkfunction(self,event):
print "Selection: ", self.mylist[self.myListBox.GetSelection()]
if __name__=='__main__':
app=wx.PySimpleApp()
frame=MyFrameName(parent=None,id=-1)
frame.Show()
app.MainLoop()
Note:
Créer une boite de dialogue avec wxPython
(Message dialog box)
Tutoriels pour apprendre wxPython
Apprendre wxPython par l'exemple
Références
- wxPython: Page Officielle
- wxPython Tutorial video (video en anglais)
- wxpython Tutorial
- wxpython exemples