Tutoriel wxPython

Published: 12 décembre 2013

DMCA.com Protection Status

Introduction

wxPython logo (<a href=image source)">
wxPython logo (image source)

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

Création d'une simple fenêtre avec le titre:
Création d'une simple fenêtre avec le titre: "Hello World !"

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

Texte statique (StaticText) avec wxPython
Texte statique (StaticText) 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

Un simple bouton avec wxPython
Un simple 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

Bitmap bouton avec wxPython
Bitmap 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)

        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

Menu avec wxPython
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

Un curseur (slider) avec wxPython
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)

Un bouton fléché (spinner) avec wxPython
Un bouton fléché (spinner) 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.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)

Cases à cocher (checkbox) avec wxPython
Cases à cocher (checkbox) 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.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

"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

Image

of