L’affichage d’images dans une interface Tkinter peut poser des défis, notamment en termes de compatibilité de formats.
Ces limitations peuvent nuire à l’esthétique de votre interface et réduire l’interactivité de votre application.
Cet article explore comment surmonter ces obstacles en utilisant Tkinter et la bibliothèque Pillow pour intégrer efficacement des images.
Créez des interfaces graphiques interactives avec Python et TKinter !
Afficher des Images Tkinter avec Label
Affichage d'images dans une interface Tkinter à l'aide du widget Label
Lorsque vous développez une interface graphique pour votre application, il peut être souhaitable d’afficher des images pour améliorer l’esthétique et l’interactivité de votre interface. Tkinter, le module standard de Python pour la création d’interfaces graphiques, offre plusieurs méthodes pour intégrer des images dans vos widgets.
Tkinter fonctionne particulièrement bien avec les images au format PNG et ICO. Cependant, il présente des limitations avec d’autres formats tels que JPEG. Pour utiliser des images au format JPEG, vous devrez recourir à des bibliothèques supplémentaires comme Pillow (PIL).
Pour afficher une image dans une interface Tkinter, vous pouvez utiliser le widget Label. Voici un exemple simple qui montre comment insérer une image PNG dans une fenêtre Tkinter :
from tkinter import *
# Création de la fenêtre principale
root = Tk()
root.title("Affichage d'une Image")
root.geometry("400x300")
# Chargement de l'image
photo = PhotoImage(file="python.png")
lbl = Label(root,image=photo)
lbl.pack()
root.mainloop()
Dans le code ci-dessus, nous avons inséré une image à l’aide du widget Label . Pour ce faire, nous avons commencé par créer la fenêtre principale, comme expliqué précédemment. Ensuite, après avoir chargé l’image avec le widget PhotoImage , nous avons utilisé le widget Label pour afficher cette image dans la fenêtre. Enfin, le widget Label est ajouté à la fenêtre grâce à la méthode pack() pour positionner l’image, permettant ainsi à celle-ci de s’afficher correctement dans l’interface graphique. Voici le résultat obtenu après l’exécution de ce code :
Figure 18 : Affichage d’une Image dans une Fenêtre Tkinter
Ajuster la Taille de l'Image
Il arrive que l’image insérée soit trop grande ou trop petite pour l’interface prévue. Tkinter offre la méthode subsample pour réduire la taille de l’image. Pour agrandir l’image, vous pouvez utiliser la méthode zoom .
- Réduire la Taille de l’Image avec subsample
La méthode subsample permet de réduire la taille de l’image en divisant ses dimensions par un facteur donné.
from tkinter import *
# Création de la fenêtre principale
root = Tk()
root.title("Image Redimensionnée")
root.geometry("400x300")
# Chargement et réduction de l'image
photo = PhotoImage(file="python.png")
photo_reduite = photo.subsample(2, 2)# Réduit la taille de moitié (facteur 2)
# Création du Label avec l'image réduite
lbl = Label(root,image=photo_reduite)
lbl.pack()
# Boucle principale de l'application
root.mainloop()
Dans le code ci-dessus, la ligne photo.subsample(2, 2) réduit la largeur et la hauteur de l’image de moitié. Les arguments fournis (2, 2) représentent les facteurs de réduction appliqués respectivement aux axes X (largeur) et Y (hauteur). Une fois ce programme exécuté, la fenêtre affichée ressemblera à ceci :
- Agrandir l’Image avec zoom
Pour agrandir l’image, utilisez la méthode zoom. Notez que cette méthode prend également des facteurs d’agrandissement sur les axes X et Y.
from tkinter import *
# Création de la fenêtre principale
root = Tk()
root.title("Image Agrandie")
root.geometry("800x600")
# Chargement et agrandissement de l'image
photo = PhotoImage(file="python.png")
photo_agrandie = photo.zoom(2, 2)# Double la taille de l'image
# Création du Label avec l'image agrandie
lbl = Label(root,image=photo_agrandie)
lbl.pack()
# Boucle principale de l'application
root.mainloop()
Dans le code ci-dessus, la ligne photo.zoom(2, 2) permet de doubler la largeur et la hauteur de l’image. Les arguments (2, 2) spécifient les facteurs d’agrandissement appliqués respectivement sur les axes X (largeur) et Y (hauteur). Une fois ce programme exécuté, la fenêtre affichée ressemblera à une image agrandie :
Afficher une Image dans un Bouton
Au lieu d’insérer une image à l’aide du widget Label , ce qui est intéressant pour afficher des éléments visuels, il existe une autre méthode qui permet d’aller plus loin. En effet, vous pouvez intégrer directement une image dans un widget Button pour créer des boutons plus sophistiqués et interactifs. Cela permet non seulement d’ajouter une image, mais aussi de rendre les boutons plus dynamiques et visuellement attractifs, en combinant texte et images. Voici un exemple complet qui illustre l’intégration d’une image dans un bouton :
from tkinter import *
# Création de la fenêtre principale
root = Tk()
root.title("Bouton avec Image")
root.geometry("400x300")
# Chargement de l'image
photo = PhotoImage(file="python.png")
# Création du bouton avec l'image
btn = Button(root,image=photo,command=lambda: print("Bouton cliqué!"))
btn.pack(pady=20)
# Boucle principale de l'application
root.mainloop()
Dans cet exemple, nous allons examiner étape par étape comment le code permet d’intégrer une image dans un bouton Tkinter et d’ajouter une action lorsqu’il est cliqué. L’objectif est de rendre l’interface plus interactive et visuellement agréable en combinant des éléments graphiques avec des actions programmées. Le processus inclut le chargement de l’image, la création du bouton avec cette image, et le placement du bouton dans la fenêtre. Voici une explication détaillée de chaque
étape :
- Chargement de l’Image :L’imagepython.pngest chargée en utilisant la méthodePhotoImagede Tkinter. Cela permet de manipuler l’image pour l’afficher dans les widgets de l’interface.
- Création du Bouton :Le bouton est créé avec l’image associée via le paramètreimage=photo. De plus, une commande est définie à l’aide decommand=lambda: print(« Bouton cliqué! »), ce qui permet d’exécuter une action (dans ce cas, afficher un message dans la console) lorsque l’utilisateur clique sur le bouton.
- Placement du Bouton :Le bouton est positionné dans la fenêtre avec la méthodepack(), et l’argumentpady=20ajoute un espacement vertical autour du bouton, améliorant ainsi l’apparence de l’interface.
Lors de l’exécution de ce programme, une fenêtre s’ouvre avec un bouton contenant l’image python.png . Lorsque l’utilisateur clique sur ce bouton, le message « Bouton cliqué! » apparaît dans la console. Comme il est montré dans la figure suivant :
Gérer Images JPEG avec Pillow Tkinter
Gestion des Formats d'Images Non Supportés
Comme mentionné précédemment, Tkinter ne supporte pas directement certains formats d’images comme JPEG. Pour contourner cette limitation, vous pouvez utiliser la bibliothèque Pillow (PIL) qui étend les capacités de Tkinter en matière de gestion d’images. En premier lieu vous devez installer la bibliothèque Pillow (PIL) pour cela vous utilisez pip :
pip install Pillow
Voici comment charger et afficher une image JPEG dans Tkinter en utilisant Pillow.
from tkinter import *
from PIL import Image, ImageTk
# Création de la fenêtre principale
root = Tk()
root.title("Image JPEG avec Pillow")
root.geometry("400x300")
# Chargement et conversion de l'image avec Pillow
image = Image.open("python.jpg")# Remplacez par le chemin de votre image JPEG
photo = ImageTk.PhotoImage(image)
# Création du Label avec l'image
lbl = Label(root,image=photo)
lbl.pack()
# Boucle principale de l'application
root.mainloop()
Explication :
Voici les étapes pour charger et afficher une image JPEG dans Tkinter en utilisant Pillow :
- Importation des modules nécessaires :L’utilisation des classesImageetImageTk.PhotoImagepermet respectivement de manipuler l’image et de la convertir en un format compatible avec Tkinter.
- Chargement et conversion de l’image :La méthodeImage.open()permet de charger un fichier image JPEG, tandis queImageTk.PhotoImage()convertit cette image pour qu’elle puisse être affichée dans un widget Tkinter.
- Création d’un Label avec l’image convertie :Une fois l’image convertie, elle peut être affichée dans unLabelde la même manière que dans les exemples précédents.
Avantages de Pillow :
Pillow offre divers atouts pour intégrer des images dans Tkinter. Parmi ses avantages, on retrouve :
- Support étendu des formats d’image :Pillow prend en charge plusieurs formats d’image (JPEG, PNG, GIF, BMP, TIFF, etc.), ce qui facilite la conversion et l’utilisation d’images variées avec Tkinter.
- Redimensionnement et optimisation :Pillow permet de redimensionner et d’optimiser les images avant de les charger dans une interface Tkinter. Cela garantit que les images sont adaptées aux tailles et aux résolutions requises pour votre application.
- Facilité d’intégration avec Tkinter :Pillow simplifie la conversion des images en objets utilisables par Tkinter grâce à la méthode ImageTk.PhotoImage, permettant de charger et d’afficher facilement des images dans des widgets comme Label ou Canvas.
- Traitement avancé d’image :Pillow offre des fonctionnalités de traitement d’image telles que la rotation, l’ajustement de la luminosité, des filtres ou encore la conversion des formats de couleur (RGB, L, etc.). Cela permet de manipuler les images directement avant de les afficher dans Tkinter.
- Chargement d’images en mémoire :Avec Pillow, vous pouvez charger des images depuis des fichiers locaux ou des flux en mémoire, ce qui est particulièrement utile si vous récupérez des images depuis une base de données ou un site web pour les afficher dans votre application Tkinter.
- Simplicité d’utilisation :Pillow est une bibliothèque facile à utiliser avec des méthodes simples pour ouvrir, manipuler et afficher des images dans des applications Tkinter. Cela réduit le besoin de gestion complexe des images.
- Compatibilité multiplateforme :Pillow est compatible avec les systèmes d’exploitation majeurs (Windows, macOS, Linux), garantissant que vos applications Tkinter avec des images fonctionneront de manière cohérente sur différentes plateformes.
Formez-vous gratuitement avec Alphorm !
Maîtrisez les compétences clés en IT grâce à nos formations gratuites et accélérez votre carrière dès aujourd'hui.
FAQ
Comment afficher une image dans Tkinter ?
Pourquoi Pillow est-il nécessaire pour Tkinter ?
Comment redimensionner une image dans Tkinter ?
Peut-on afficher des images dans un bouton Tkinter ?
Quels formats d'image Pillow supporte-t-il ?
Conclusion
L’intégration d’images dans Tkinter enrichit l’esthétique de vos interfaces graphiques. Quel sera votre prochain projet utilisant ces techniques ?