Interface graphique en Python avec Tkinter
1 – Les interfaces graphiques en Python
Python fournit diverses options pour développer des interfaces graphiques GUI via de nombreuses
bibliothèques:
1. Tkinter : Tkinter est l’interface Python de la bibliothèque GUI Tk livrée avec
Python. Nous allons l’étudier en détail sur ce chapitre.
2. wxPython : Ceci est une implémentation en Python libre et open source Python
de l’interface de programmation wxWidgets.
3. PyQt : Il s’agit également d’une interface Python pour une bibliothèque
d’interface graphique Qt populaire multiplate-forme.
4. JPython : JPython est un outil Python pour Java, qui donne aux scripts Python
un accès transparent aux bibliothèques de classes Java.
Il existe de nombreuses autres interfaces graphiques disponibles, que vous pouvez trouver sur le net.
2 – La bibliothèque graphique Tkinter
Tkinter est la bibliothèque d’interface graphique standard pour Python. Python, lorsqu’il est
combiné à Tkinter, fournit un moyen rapide et facile pour créer des applications graphiques. Tkinter
fournit une puissante interface orientée objet simple et conviviale.
La création d’une application graphique à l’aide de Tkinter est une tâche assez facile. Tout ce que vous
avez à faire est de suivre les étapes suivantes:
1. Importez le module Tkinter.
2. Créez la fenêtre principale de l’application graphique via une instanciation sur la
classe Tk.
3. Entrez la boucle d’évènements principale pour agir contre chaque évènement
déclenché par l’utilisateur.
Exemple: création d’une simple fenetre Tkinter
# -*- coding: utf-8 -*-
# 1)- Importation de la bibliothèque tkinter
from tkinter import*
# 2)- Création d'une fenêtre tkinter en faisant une instanciation de la
classe Tk
maFenetre = Tk()
# vos widgets ici : bouton de commande, champ de saisie, labels...
# 3)- Entrez la boucle d'événements principale
maFenetre.mainloop()
Ce qui affiche après exécution:
Les Widgets Tkinter
La bibliothèque Tkinter fournit divers contrôles, tels que des boutons, des étiquettes et des zones de
texte utilisées dans une application graphique. Ces contrôles sont communément appelés widgets.
Il existe actuellement plusieurs types de widgets dans Tkinter. Nous présentons ici les noms des
principaux widgets ainsi qu’une brève description:
1. Button : le widget Button permet de créer des boutons pour votre application.
2. Canva : le widget Canva permet de dessiner des formes, telles que des lignes, des ovales, des
polygones et des rectangles, dans votre application.
3. Checkbutton : le widget Checkbutton permet d’afficher un certain nombre d’options sous forme de
cases à cocher. L’utilisateur peut sélectionner plusieurs options à la fois.
4. Entry : le widget Entry est utilisé pour afficher un champ de texte d’une seule ligne permettant
d’accepter les valeurs d’un utilisateur.
5. Frame : le widget Frame (cadre) est utilisé en tant que widget conteneur pour organiser d’autres
widgets.
6. Label : le widget Label est utilisé pour fournir une légende ou description pour les autres widgets. Il
peut aussi contenir des images.
7. Listbox : le widget Listbox est utilisé pour fournir une liste d’options à un utilisateur.
8. menubutton : le widget menubutton est utilisé pour afficher les menus dans votre application.
9. Menu : le widget Menu est utilisé pour fournir diverses commandes à un utilisateur. Ces commandes
sont contenues dans Menubutton.
10. Message : le widget Message est utilisé pour afficher des champs de texte multilignes permettant
d’accepter les valeurs d’un utilisateur.
11. Radiobutton : le widget Radiobutton est utilisé pour afficher un certain nombre d’options sous
forme de boutons radio. L’utilisateur ne peut sélectionner qu’une option à la fois.
12. Scale : le widget Echelle est utilisé pour fournir un widget à curseur.
13. Scrollbar : le widget Scrollbar ou barre de défilement est utilisé pour ajouter une fonctionnalité de
défilement à divers widgets, tels que les zones de liste.
14. Text : le widget Text est utilisé pour afficher du texte sur plusieurs lignes.
15. Toplevel : le widget Toplevel est utilisé pour fournir un conteneur de fenêtre séparé.
16. Spinbox : le widget Spinbox est une variante du widget standard Tkinter Entry, qui peut être utilisé
pour sélectionner un nombre fixe de valeurs.
17. PanedWindow : le widget PanedWindow est un conteneur pouvant contenir un nombre quelconque
de volets, disposés horizontalement ou verticalement.
18. LabelFrame : un labelframe est un simple widget de conteneur. Son objectif principal est d’agir
comme un intercalaire ou un conteneur pour les dispositions de fenêtre complexes.
19. tkMessageBox : ce module est utilisé pour afficher des boîtes de message dans vos applications.
Python et la bibliothèque de traitement d’images Pillow
1 – Pillow et manipulation d’images sur une fenêtre Tkinter
1.1- La bibliothèque Pillow
Pour traiter les images, Python dispose d’une librairie nommée Pillow. Pillow constitue actuellement
un fork successeur du projet PIL (Python Imaging Library). Elle est conçue de manière à offrir un accès
rapide aux données contenues dans une image, elle est doté d’un pouvoir magique et puissant pour le
traitement et la manipulation des différents formats de fichiers images tels que PNG, JPEG, GIF,
TIFF et BMP…
1.2- Installation de la bibliothèque Pillow
La bibliothèque Pillow s’installe d’une façon très simple à l’aide de l’ utilitaire pip :
pip install pillow
2- Insertion d’image à l’aide de la bibliothèque Pillow
Maintenant que la bibliothèque Pillow est installé, elle peut être utilisée pour insérer et manipuler des
images au sein d’une fenêtre Tkinter. Pour ce faire, il suffit de l’importer et de créer un objet image à
partir d’un fichier :
# -*- coding: utf-8 -*-
from PIL import Image, ImageTk
# Création de l'objet image
load = Image.open("chemin_vers_le_fichier_images" )
# Création de la photo à partir de l'objet image
photo = ImageTk.PhotoImage(load)
Pour bien comprendre, nous allons traiter cela sur un exemple simple :
Considérons une image nommée voiture.png
Mettons l’image dans un dossier nommé images
Créons un fichier python dans le même répertoire que le dossier images et
mettons le code suivant:
Exemple. d’insertion d’image
# -*- coding: utf-8 -*-
from tkinter import *
from PIL import Image, ImageTk
root = Tk()
root.title("Tkinter window")
root.geometry("300x200")
# Création de l'objet image
load = Image.open("images/voiture.png")
# Création de la photo à partir de l'objet image
photo = ImageTk.PhotoImage(load)
# Placer l'image dans un label
label_image = Label(root,image=photo)
label_image.place(x=0, y=0)
root.mainloop()
Ce qui affiche après exécution :
Redimensionnement de l’image
La bibliothèque Pillow, permet aussi le redimensionner limage à l’aide la méthode thumbnail() en
précisant entre les parenthèses la dimension en pixels:
# -*- coding: utf-8 -*-
# Création de l'objet image
load = Image.open("images/voiture.png")
# Redimensionner l'image
load.thumbnail((50,50))
Liste ComboBox Tkinter
1 – Création dun ttk.ComboBox Tkinter
Tkinter Combobox est une sorte de liste déroulante à choix sélectionnable par l’utilisateur. C’est une
combinaison de saisie et de menu déroulant, comme vous pouvez le voir. Lorsque vous cliquez sur la
flèche à droite, vous verrez un menu déroulant indiquant tous les choix possible.
Pour créer une liste ComboBox, vous devez suivre les étapes suivantes :
1. Importer la bibliothèque Tkinter et le module ttk
2. Créer une liste Python contenant les éléments de la liste ComboBox
3. Créer la liste Combobox en utilisant la méthode ttk.Combobox()
4. Choisissez l’élément qui s’affiche par défaut, en indiquant son index
Exemple
# -*- coding: utf-8 -*-
# 1) - Importation des modules nécessaires
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.geometry('300x200')
labelChoix = tk.Label(root, text = "Veuillez faire un choix !" )
labelChoix.pack()
# 2) - créer la liste Python contenant les éléments de la liste Combobox
listeProduits=["Laptop", "Imprimante","Tablette","SmartPhone"]
# 3) - Création de la Combobox via la méthode ttk.Combobox()
listeCombo = ttk.Combobox(root, values=listeProduits)
# 4) - Choisir l'élément qui s'affiche par défaut
listeCombo.current(0)
listeCombo.pack()
root.mainloop()
Ce qui affiche après exéction :
2 – Associer une action à la liste combobox ( bind action)
Vous l’avez sans doute remarqué, que si vous faite la sélection d’un élément de la liste Combobox,
aucun évenement ne se produit, tout simplement par ce qu’on a associer aucune action à la liste
combobox. Dans ce paragraphe, nous allons montrer, comment créer une action liée à cette combobox.
2.1 – On crée une action liée ( bind action) à l’aide de la commande:
listeCombo.bind("<<ComboboxSelected>>" , action)
2.2 – On crée la méthode action
def action(event):
# Obtenir l'élément sélectionné
select = listeCombo.get()
print("Vous avez sélectionné : '", select,"'")
2.3 Code finale de la liste combobox avec action liée
# -*- coding: utf-8 -*-
# 1) - Importation des modules nécessaires
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.geometry('300x200')
def action(event):
# Obtenir l'élément sélectionné
select = listeCombo.get()
print("Vous avez sélectionné : '", select,"'")
labelChoix = tk.Label(root, text = "Veuillez faire un choix !" )
labelChoix.pack()
# 2) - créer la liste Python contenant les éléments de la liste Combobox
listeProduits=["Laptop", "Imprimante","Tablette","SmartPhone"]
# 3) - Création de la Combobox via la méthode ttk.Combobox()
listeCombo = ttk.Combobox(root, values=listeProduits)
# 4) - Choisir l'élément qui s'affiche par défaut
listeCombo.current(0)
listeCombo.pack()
listeCombo.bind("<<ComboboxSelected>>" , action)
root.mainloop()
Le module Filedialogue Python Tkinter
1- Le module Filedialogue et les méthodes associées
FileDialog est un module avec des fonctions de dialogues d’ouverture et de sauvegarde, qui pourra vous
aider à améliorer votre interface graphique Tkinter pour ouvrir ou sauvegarder vos fichiers.
Le module Filedialogue est doté de trois principale méthodes:
1. askopenfilename() : affiche une boite de dialogue qui demande l’ouverture d’un
fichier existant.
2. asksaveasfilename() : affiche une boite de dialogue qui permet d’enregistrer un
fichier
3. askdirectory() : affiche une boite de dialogue qui demande l’ouverture d’un
répertoire.
2- La méthode askopenfilename
Comme nous l’avons expliqué ci haut, cette méthode affiche une boite de dialogue qui demande de
sélectionner le ficher à ouvrir et récupère le fichier avec son chemin sur une variable. Elle possède les
paramètres suivants :
1. initialdir : qui permet de pointer vers un répertoire intial dès son ouverture.
2. title : qui permet de personnaliser le titre de la boite de dialogue
3. filetypes : qui permet de spécifier les types de fichiers à ouvrir
Exemple. methode askopenfilename
from tkinter import filedialog
from tkinter import *
filename = filedialog.askopenfilename(initialdir= "/",title="Select
File",filetypes=(("png files","*.png"),("jpeg files","*.jpg"),("all
files","*.*")))
print(filename)
En exécutant ce code on verra apparaitre la boite de dialogue suivante qui pointe vers la racine du
disque C:\
Remarque
Vous avez sans doute remarqué qu’une petite fenêtre popup s’affiche avec la boite de dialogue ! Pour se
débarrasser de cette dernière il suffit d’utiliser la méthode withdraw():
from tkinter import filedialog
from tkinter import *
Tk().withdraw()
filename = filedialog.askopenfilename(initialdir= "/",title="Select
File",filetypes=(("png files","*.png"),("jpeg files","*.jpg"),("all
files","*.*")))
print(filename)
3- La méthode asksaveasfilename
Cette méthode est semblable à la précendente à la différence qu’elle enregistre un fichier au lieu de
l’ouvrir et elle possède donc exactement les mêmes paramètres.
Exemple. méthode asksaveasfilename
from tkinter import filedialog
from tkinter import *
Tk().withdraw()
filename = filedialog.asksaveasfilename(initialdir = "/",title = "Select
file",filetypes = (("png files","*.png"),("jpeg files","*.jpg"),("all
files","*.*")))
print(filename)
4 – La méthode askdirectory
Comme nous l’avons déjà mentionné, cette méthode demande à l’utilisateur de choisir le répertoire à
ouvrir. Quand l’utilisateur sélectionne un répertoire ce dernier sera stocké dans une variable du type
string qui contient le chemin vers le répertoire sélectionné.
Exemple. méthode askdirectory
from tkinter import *
from tkinter import filedialog
Tk().withdraw()
myDirectory = filedialog.askdirectory()
print (myDirectory)
Mini Projet Python : Création d’un éditeur de texte partie1
1 – Création de l’arborescence du système
Avant de commencer à coder, vous devez faire une conception de votre système. Nous vous proposons la
suivante:
1. library : représente le répertoire des librairies du système ( modules et
classes). Ce répertoire contient un fichier vide nommé __init__.py qui indique à
l’interpréteur de Python qu’il s’agit du répertoire d’un module.
2. library.py : représente la bibliothèque du système qui va contenir toutes les
classes Python nécessaire au fonctionnement du système.
3. main.py : représente le fichier principal avec lequel démarre le système. Ce
fichier ne contient que très peu de code, généralement les instances des classes
qui se trouvent sur la bibliothèque library.py
2- Le code du fichier library.py
2.1 Importation de la bibliothèque tkinter
L’éditeur que nous souhaitons créer, manipule des objets graphique: fenêtres, boutons, labels, boite de
dialogue…Pour cela nous devons importer une biblioth èque graphique. Nous utilisons la biblioth èque
Tkinter pour ce projet:
from tkinter import *
import os
savedFile = {1:""}
NB :
la troisième ligne nous permettra de stocker les objets files qui ne tiennent pas dans une instance de
classe.
2.2- Création de la classe principale du fichier library.py
from tkinter import *
import os
savedFile = {1:""}
class Win:
def __init__(self,master,content):
# Fenêtre principale
self.master = master
# Main Text Widget
self.content=content
# Création de la fenêtre tkinter
def create(self):
self.master = Tk()
self.master.title("Editeur de Texte")
self.master.geometry("700x550")
# Méthode qui ajoute la zone de texte
def add_text(self):
self.content = Text(self.master)
self.content.pack(expand=1,fill='both')
# Génération de la fenêtre principale
def generate(self):
self.master.mainloop()
2.3- Ajout des menus
Pour bien comprendre la méthode d’ajout des menus, veuillez réviser le tutoriel(page18) sur les menus.
Nous passons directement au code qui permet d’ajouter une méthode add_menu( ) qui permet de jouer
l’affaire:
def add_menu(self):
# 1 - Création de la barre des menus
menuBar = Menu(self.master)
# 2 - Création du menu Fichier
menuFichier = Menu(menuBar,tearoff=0)
menuBar.add_cascade(label = "Fichier", menu=menuFichier)
# Création des sous menus du menu Fichier
menuFichier.add_command(label="Nouveau", command=self.nouveau)
menuFichier.add_command(label="Ouvrir", command=self.fopen)
menuFichier.add_command(label="Enregistrer", command=self.save)
menuFichier.add_command(label="Enregistrer sous",
command=self.saveAs)
menuFichier.add_command(label="Quitter", command = self.quitter)
self.master.config(menu = menuBar)
#3 - Création du Menu Edition
menuEdition= Menu(menuBar,tearoff=0)
menuBar.add_cascade(label = "Edition ", menu=menuEdition)
menuEdition.add_command(label="Annuler")
menuEdition.add_command(label="Rétablir")
menuEdition.add_command(label="Copier", command=self.copy)
menuEdition.add_command(label="Couper", command = self.cut)
menuEdition.add_command(label="Coller", command=self.past)
#4 - Création du Menu Outils
menuOutils = Menu(menuBar,tearoff=0)
menuBar.add_cascade(label = "Outils", menu = menuOutils)
menuOutils.add_command(label="Préférences")
# Création du Menu Aide
menuAide = Menu(menuBar,tearoff=0)
menuBar.add_cascade(label = "Aide", menu = menuAide)
menuAide.add_command(label="A propos")
2.4 – Ajout de commandes pour les menus
Jusqu’à présent les menus crées ne sont pas fonctionnels, puisque nous leura avons pas encore crée des
commandes ! Nous devons donc associer à chaque menu une commande :
command = nom_de_la_commande
Nous devons ensuite créer une action pour chaque commande et qui porte le même nom :
def nom_de_la_commande():
#code de l'action ici
Code des actions des menus
#======================================
# - Définition des actions des menus
#======================================
#------------------------------ #
- actions du menu Fichier
#-------------------------------
def quitter(self):
self.master.quit()
def nouveau(self):
os.popen("python main.py")
def fopen(self):
file = self.master.filename =
filedialog.askopenfilename(initialdir = "/",title = "Select
File",filetypes = (("Text Files","*.txt"),("all files","*.*")))
fp = open(file,"r")
r = fp.read()
self.content.insert(1.0,r)
# Menu Enregistrer sous
def saveAs(self):
# create save dialog
fichier=self.master.filename=filedialog.asksaveasfilename(initialdir =
"/",title = "Enregistrer Sous\ " ,filetypes = (("Fichier
Texte","*.txt"), ("Tous les fichiers","*.*")))
fichier = fichier + ".txt"
# Utilisation du dictionnaire pour stocker le fichier
savedFile[1] = fichier
f = open(fichier,"w")
s = self.content.get("1.0",END)
f.write(s)
f.close()
# menu Enregistrer
def save(self):
if(savedFile[1] ==""):
self.saveAs()
else:
f = open(savedFile[1],"w")
s = self.content.get("1.0",END)
f.write(s)
f.close()
#------------------------------
# - actions du menu Edition
#------------------------------
def copy(self):
self.content.clipboard_clear()
self.content.clipboard_append(self.content.selection_get())
def past(self):
self.content.insert(INSERT, self.content.clipboard_get())
def cut(self):
self.copy()
self.content.delete("sel.first","sel.last")
Remarque
Les actions associées aux menus doivent être placées avant les fonctions qui définissent les menus
2.5- Code final du fichier library.py ( Code sur pastbin )
# -*- coding: utf-8 -*-
#------------------------------
# Author : Y. DERFOUFI
# Author Title : Professeur Agrégé de mathématiques & Docteur en Math-
Informatiques
# Compagny : CRMEF OUJDA
#-----------------------------
from tkinter import *
import os
savedFile = {1:""}
#======================================
# 1 - Classe de la fenêtre pricipale
#======================================
class Win:
def __init__(self,master,content):
# Fenêtre principale
self.master = master
# Main Text Widget
self.content=content
# Création de la fenêtre tkinter
def create(self):
self.master = Tk()
self.master.title("Editeur de Texte")
self.master.geometry("700x550")
# Méthode qui ajoute la zone de texte
def add_text(self):
self.content = Text(self.master)
self.content.pack(expand=1,fill='both')
# Génération de la fenêtre principale
def generate(self):
self.master.mainloop()
#======================================
# 2 - Définition des actions des menus
#======================================
#------------------------------
# 2.1 - actions du menu Fichier
#-------------------------------
def quitter(self):
self.master.quit()
def nouveau(self):
os.popen("python main.py")
def fopen(self):
file = self.master.filename =
filedialog.askopenfilename(initialdir = "/",title = "Select
File",filetypes = (("Text Files","*.txt"),("all files","*.*")))
fp = open(file,"r")
r = fp.read()
self.content.insert(1.0,r)
# Menu Enregistrer sous
def saveAs(self):
# create save dialog
fichier=self.master.filename=filedialog.asksaveasfilename(initialdir =
"/",title = "Enregistrer Sous\ " ,filetypes = (("Fichier
Texte","*.txt"), ("Tous les fichiers","*.*")))
fichier = fichier + ".txt"
# Utilisation du dictionnaire pour stocker le fichier
savedFile[1] = fichier
f = open(fichier,"w")
s = self.content.get("1.0",END)
f.write(s)
f.close()
# menu Enregistrer
def save(self):
if(savedFile[1] ==""):
self.saveAs()
else:
f = open(savedFile[1],"w")
s = self.content.get("1.0",END)
f.write(s)
f.close()
#------------------------------
# 2.2 - actions du menu Edition
#------------------------------
def copy(self):
self.content.clipboard_clear()
self.content.clipboard_append(self.content.selection_get())
def past(self):
self.content.insert(INSERT, self.content.clipboard_get())
def cut(self):
self.copy()
self.content.delete("sel.first","sel.last")
#======================================
# 2 - Méthodes d'ajout des menus
#======================================
def add_menu(self):
# 1 - Création de la barre des menus
menuBar = Menu(self.master)
# 2 - Création du menu Fichier
menuFichier = Menu(menuBar,tearoff=0)
menuBar.add_cascade(label = "Fichier", menu=menuFichier)
# Création des sous menus du menu Fichier
menuFichier.add_command(label="Nouveau", command=self.nouveau)
menuFichier.add_command(label="Ouvrir", command=self.fopen)
menuFichier.add_command(label="Enregistrer", command=self.save)
menuFichier.add_command(label="Enregistrer sous",
command=self.saveAs)
menuFichier.add_command(label="Quitter", command = self.quitter)
self.master.config(menu = menuBar)
#3 - Création du Menu Edition
menuEdition= Menu(menuBar,tearoff=0)
menuBar.add_cascade(label = "Edition ", menu=menuEdition)
menuEdition.add_command(label="Annuler")
menuEdition.add_command(label="Rétablir")
menuEdition.add_command(label="Copier", command=self.copy)
menuEdition.add_command(label="Couper", command = self.cut)
menuEdition.add_command(label="Coller", command=self.past)
#4 - Création du Menu Outils
menuOutils = Menu(menuBar,tearoff=0)
menuBar.add_cascade(label = "Outils", menu = menuOutils)
menuOutils.add_command(label="Préférences")
# Création du Menu Aide
menuAide = Menu(menuBar,tearoff=0)
menuBar.add_cascade(label = "Aide", menu = menuAide)
menuAide.add_command(label="A propos")
3- Code du fichier principal main.py ( Code sur pastbin )
# -*- coding: utf-8 -*-
# Importation des bibliothèques nécessaires
from tkinter import *
from tkinter import filedialog
# Importation du module library.py
from library.library import*
# Création du dictionnaire qui stock les objets files
savedFile = {1:""}
# Création d'une instance sur la classe principale
root = Win("root","c")
# Appel des méthodes qui créent l'objet fenêtre avec tous ces composants
root.create()
root.add_text()
root.add_menu()
root.generate()
4 – Aperçu de l’éditeur
Si vous avez bien codé votre système et que tout va bien, voici l’aperçu de votre petit éditeur de texte :
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
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 400×200 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:
La bibliothèque graphique PyQt5
1 – A propos de PyQt5
PyQt est une bibliothèque considéré comme une liaison du langage Python avec la boîte à outils GUI
toolkit Qt, qui peut être installée rapidement avec l’ utilitaire pip et implémentée en tant que module
Python. PyQt est un logiciel gratuit développé par la firme Riverbank Computing . Il est disponible
dans des conditions similaires aux versions Qt antérieures et cela signifie une variété de licences, dont
la GNU Général Public Licence ( GPL) et la licence commerciale , mais pas la GNU Lesser Général
Public Licence (LGPL). PyQt prend en charge Microsoft Windows ainsi que diverses versions d’UNIX,
y compris Linux et MacOS (ou Darwin). PyQt implémente environ 440 classes et plus de 6 000
fonctions et méthodes.
2 – Installation de PyQt5 et premier programme
2.1 – Installation de PyQt5
La bibliothèque PyQt5 , peut être installé facilement via l’ utilitaire pip :
pip3 install pyqt5
Après avoir installé la bibliothèque PyQt5, on dois installer les outils auxiliaires tools à l’aide de
l’invite de commande:
pip3 install pyqt5-tools
2.2 – Première fenêtre graphique PyQt5
Pour créer une fenêtre graphique en PyQt5, on dois:
1. Importer le module système : sys
2. Importer la classe qui génère l’application : QApplications depuis le package
PyQt5.QtWidgets
3. Importer la classe QWidget depuis le package PyQt5.QtWidgets
4. Créer une application à l’aide de la méthode instance() de la classe
QApplication
5. Créer une fenêtre avec la méthode QWidget(): fen = QWidget()
6. Visualiser la fenêtre à l’aide de la méthode show() : fen.show()
7. Exécuter l’application à l’aide de la méthode exec_() : app.exec_()
Code première fenêtre graphique avec PyQt5:
#-*- coding: utf-8 -*-
# importations nécessaire à la réalisation d'une interface graphique
import sys
from PyQt5.QtWidgets import QApplication, QWidget
# création d'une application Qt avec QApplication
app = QApplication.instance()
# on vérifie s'il existe déjà une instance de QApplication
if not app:
# sinon on crée une instance de QApplication
app = QApplication(sys.argv)
# On crée une fenêtre à l'aide de l'objet QWidget
fen = QWidget()
# on donne un titre à la fenêtre
fen.setWindowTitle("Ma premiere fenetre" )
# on fixe la taille de la fenêtre
fen.resize(500,250)
# on visualise la fenêtre
fen.show()
# exécution de l'application, l'exécution permet de gérer les événements
app.exec_()
Ce qui affiche une jolie fenêtre à l’exécution: