Interface graphique wxPython

1 - Introduction

Développé par Robin Dunn avec Harri Pasanen, wxPython est implémenté en tant que module d'extension Python. wxPython n'est autre qu'un wrapper:bibliothèque dont la fonction principal est d'appeler et interroger les modules et fonctions d'une autre bibliothèque: wxWidgets (écrit en C ++), une boîte à outils d'interface graphique multi-plateforme populaire.




Tout comme wxWidgets, wxPython est également un logiciel gratuit. Il peut être téléchargé sur le site officiel http://wxpython.org. Les fichiers binaires et le code source de nombreuses plates-formes de système d'exploitation sont disponibles au téléchargement sur ce site. wxPython peut aussi être installé directement via l'utilitaire pip.

Les principaux modules de l'API wxPython incluent un module principal. Il se compose de la classe wxObject, qui constitue la base de toutes les classes de l'API. Le module de contrôle contient tous les widgets utilisés dans le développement d'applications d'interface graphique. Par exemple, wx.Button, wx.StaticText, wx.TextCtrl (contrôle de texte modifiable), etc.

L'API wxPython possède un module GDI (Graphics Device Interface). C'est un ensemble de classes utilisées pour dessiner sur des widgets. Des classes comme la police, la couleur, le pinceau, etc. en font partie. Pour plus de détails sur la bibliothèque wxPython, nous vous conseillons de voir la documentation officielle sur le wiki de la bibliothèque : https://wiki.wxpython.org/

2 - Installation de wxPython et premier programme

2.1 - Installation de la bibliothèque wxPython

Pour installer la bibliothèque wxPython, rien de plus simple. Il suffit de lancer l'utilitaire de commande cmd et de taper :

pip install -U wxPython

pip-install-wxpython.png-gui-python-wxpython

2.2 - Premier programme 'Hello World !' avec wxPython

Nous allons voir maintenant comment créer notre première fenêtre 'Hello World !' avec wxPython. Pour cela on doit :

  1. Importer la bibliothèque wxPython :  à l'aide de la commande import wx
  2. Créer un objet applicationen utilisant la méthod App() : app = wx.App()
  3. Créer un cadre (frame) : frame = wx.Frame()
  4. Visualiser le frame à l'aide de la méthode Show() : frame.Show()
  5. Mettre l'application en œuvre avec la méthode Mainloop(): app.Mainloop()
# Importation de la bibliothèque wxPython. 
import wx

# Création d'un objet application en utilisant la méthod App(). 
app = wx.App()

# Création d'un cadre (frame)sans parent. 
frame = wx.Frame(None)

# Visualiser le frame. 
frame.Show()
app.MainLoop()

Ce qui affiche après exécution:

2.3 Propriétés d'une fenêtre frame

Une fenêtre frame de la bibliothèque wxPython, est dotée de nombreuses propriétés : title, SetSize, BackgroundColour...

Exemple. Fenêtre de dimension 400x200 d'arrière plan vert

# Importation de la bibliothèque wxPython. 
import wx

# Création d'un objet application en utilisant la méthod App(). 
app = wx.App()

# Création d'un cadre (frame)sans parent. 
frame = wx.Frame(None)

# Propriétés de la fenêtre 
frame.Title = "Hello World !" 
frame.BackgroundColour = "green" 
frame.SetSize(0,0,400,200)

# Visualiser le frame. 
frame.Show()
app.MainLoop()

3 - Les widgets wxPython

wxPythont possède une large gamme de divers widgets, y compris des boutons, des cases à cocher, des curseurs et des zones de liste.

  1. wx.Button
  2. wx.ToggleButton
  3. wx.StaticText
  4. wx.StaticLine
  5. wx.StaticBox
  6. wx.ComboBox
  7. wx.CheckBox
  8. wx.StatusBar
  9. wx.RadioButton
  10. wx.Gauge
  11. wx.Slider
  12. wx.SpinCtrl
  13. wx.TextCtrl

3.1 - Le widget wx.Button

Le widget wx.Button permet de créer un bouton de commande. Pour cela on doit :

  1. Créer un frame principal avec la méthode Frame()
  2. Créer un panel avec la méthode Panel()
  3. Ajouter le bouton au panel

3.1.1 - Création d'un simple bouton

Exemple. Un simple bouton

# -*- coding: utf-8 -*- 
import wx

app = wx.App() 
frame = wx.Frame(None, title='Fenêtre avec bouton')
frame.SetSize(0,0,350,200)

# Créer un Panel 
panel = wx.Panel(frame)

# Ajouter un bouton au panel 
button = wx.Button(panel,label="un simple bouton") 

frame.Show()
app.MainLoop()





Ce qui affiche un bouton sur le coin à gauche en haut de la fenêtre :

Mais on peut facilement changer la position et les dimensions du bouton à l'aide de la méthode SetSize():

button.SetSize(50,50,200,30)

3.1.2 - Associer une action à un bouton de commande

Pour associer une action event à un bouton de commande, il suffit de définir l’évènement sur une méthode Python et de la lier au bouton  à l'aide de la méthode bind():

button.Bind(wx.EVT_BUTTON, action)

Exemple: bouton de fermeture d'une fenêtre.

# -*- coding: utf-8 -*- 
import wx

def action(event):     
    frame.Close()

app = wx.App() 
frame = wx.Frame(None, title='Fenêtre avec bouton')
frame.SetSize(0,0,350,200)

# Créer un Panel 
panel = wx.Panel(frame)

# Ajouter un bouton au panel 
button = wx.Button(panel,label="un simple bouton") 
button.SetSize(50,50,200,30)

# Associer l'évenement de fermeture au bouton 
button.Bind(wx.EVT_BUTTON, action)

frame.Show()
app.MainLoop()

En exécutant le code ci-dessus, on obtient la fenêtre suivante dotée d'un bouton de fermeture :

Et maintenant en cliquant sur le bouton, la fenêtre se ferme automatiquement.

3.2 Le widget StaticText (label)

Pour créer un label sur une fenêtre wxPython, on utilise le widget StaticText:

Exemple

import wx 

app = wx.App() 
window = wx.Frame(None, title = "wxPython Frame", size = (300,200)) 

# add Panel
panel = wx.Panel(window) 
panel.BackgroundColour="white"

# Create Label on panel
label = wx.StaticText(panel, label = "Hello World", pos = (100,50)) 
window.Show(True) 
app.MainLoop()

4 - mini app wxPython

Nous allons maintenant créer une petite application qui affiche à l'utilisateur une petite fenêtre lui demandant de saisir son nom et de lui afficher un message de bienvenue après avoir cliqué sur le bouton de validation.

# -*- coding: utf-8 -*-
import wx

def action(event):
    s = edit.GetValue()
    lblResult.SetLabelText("Bienvenue : " + s)

    
app = wx.App()
frame = wx.Frame(None, title='Fenêtre avec bouton')

frame.SetSize(0,0,550,300)

# === Créer un Panel === 
panel = wx.Panel(frame)

#  === Label nom & sortie === 
lblNom = wx.StaticText(panel)
lblNom.SetSize(50,50,100,10)
lblNom.SetLabel("Saisir votre nom")
lblResult = wx.StaticText(panel)
lblResult.SetLabel("")
lblResult.SetSize(200,100,100,20)

# === TextEntry === 
edit = wx.TextCtrl(panel)
edit.SetSize(200,50,200,30)

#  === Ajouter un bouton au panel === 
button = wx.Button(panel,label="Valider")
button.SetSize(200,150,200,30)

#  === Associer l'évenement de fermeture au bouton === 
button.Bind(wx.EVT_BUTTON, action)

frame.Show()

app.MainLoop()

Ce qui affiche après exécution du code:






 

 

Younes Derfoufi
CRMEF OUJDA

1 thought on “Interface graphique wxPython

Leave a Reply