Des interfaces graphiques avec Tkinter
Programmation évènementielle
Interfaces Homme-Machine
Interagir avec un ordinateur
CLI (Command Line Interface) : interaction clavier
GUI (Graphical User Interface) : interaction souris-clavier
NUI (Natural User Interface) : interaction tactile, capteurs
Programmation évènementielle
API pour développer des IHM
Java : AWT,SWT,Swing,JavaFX,...,JGoodies, QtJambi ...
C,C++ : Xlib, GTk, Qt, MFC, ...
Python : TkInter, wxWidgets, PyQt, Pyside, Kivy,libavg...
JavaScript : Angular, React, [Link], JQWidgets ...
...
Programmation évènementielle
Tkinter Tkinter (de l'anglais Tool kit interface)
Tkinter est la bibliothèque GUI standard pour Python. Python lorsqu’il
est utilisé avec Tkinter fournit un moyen rapide et facile de créer des applications
GUI. Tkinter fournit une puissante interface, orientée objet à la boîte à outils Tk
GUI.
La création d’une application GUI à l’aide de Tkinter est une tâche facile. Tout ce
que vous devez faire est d’effectuer les étapes suivantes :
Importez le module Tkinter.
Créez la fenêtre principale de l’application GUI.
Ajoutez un ou plusieurs des widgets mentionnés ci-dessous à l’application GUI.
Faite une boucle d’événement pour prendre des mesures contre chaque
événement déclenché par l’utilisateur.
Programmation évènementielle
Des interfaces graphiques avec Tkinter
Nous allons maintenant voir comment créer des interfaces graphiques à
l'aide d'un module présent par défaut dans Python : Tkinter.
Ce module permet de créer des interfaces graphiques en orant une passerelle entre
Python et la bibliothèque Tk.
Vous allez pouvoir apprendre dans ce chapitre à créer des fenêtres, créer des
boutons, faire réagir vos objets graphiques à certains évènements. . .
Programmation évènementielle
Des interfaces graphiques avec Tkinter
Python Tkinter est l'interface utilisateur graphique (GUI) standard
prise en charge par Python. Lorsque Tkinter est utilisé avec Python, il en résulte
la création d'une interface graphique très pratique et assez rapide. Le principal
avantage d'utiliser Tkinter est qu'il possède une interface orientée objet.
Le succès de toute application ou site Web dépend de la qualité de son
interaction avec l'utilisateur, c'est-à-dire qu'une interface graphique attrayante
aide à créer une bonne application. Eh bien, Python Tkinter le fait pour nous.
Programmation évènementielle
Présentation de Tkinter
Tkinter (Tk interface) est un module intégré à la bibliothèque standard de
Python, bien qu'il ne soit pas maintenu directement par les développeurs de Python.
Il offre un moyen de créer des interfaces graphiques via Python.
Tkinter est disponible sur Windows et la plupart des systèmes Unix. Les
interfaces que vous pourrez développer auront donc toutes les chances d'être
portables d'un système à l'autre.
Notez qu'il existe d'autres bibliothèques pour créer des interfaces
graphiques. Tkinter a l'avantage d'être disponible par défaut, sans nécessiter une
installation supplémentaire.
Programmation évènementielle
Présentation de Tkinter
Tkinter (" Tk Inter face") est le package multi-plateforme standard
de python pour la création d'interfaces utilisateur graphiques (GUI). Il donne
accès à un interpréteur Tcl sous-jacent avec la boîte à outils Tk, qui est elle-
même une bibliothèque d'interface utilisateur graphique multiplateforme et
multilingue
Tkinter n'est pas la seule bibliothèque graphique pour python, mais c'est celle qui est
fournie en
standard. Les bibliothèques GUI supplémentaires pouvant être utilisées avec python incluent
wxPython , PyQt et kivy .
La plus grande force de Tkinter réside dans son omniprésence et sa simplicité. Il fonctionne
directement sur la plupart des plates-formes (Linux, OSX, Windows)
Programmation évènementielle
Création de la fenêtre principale
Ainsi la classe Tk() , qui est l'une des classes les plus fondamentales de la
bibliothèque Tkinter, contient tout ce qu'il faut pour engendrer différents types de fenêtres
d'application, de tailles ou de couleurs diverses, avec ou sans barre de menus, etc.
Nous nous en servons ici pour créer notre objet graphique de base, à savoir la
fenêtre qui contiendra tout le reste. Dans les parenthèses de Tk(), nous pourrions préciser
différentes options, mais nous laisserons cela pour un peu plus tard.
[Link]() est très importante, parce que c'est elle qui provoque le
démarrage du réceptionnaire d'événements associé à la fenêtre. Cette instruction est
nécessaire pour que votre application soit « à l'affût » des clics de souris, des pressions
exercées sur les touches du clavier, etc. C'est donc cette instruction qui « la met en marche
», en quelque sorte
Comme son nom l'indique (mainloop), il s'agit d'une méthode de l'objet fen1,
qui active une boucle de programme, laquelle « tournera » en permanence en tâche de
fond, dans l'attente de messages émis par le système d'exploitation de l'ordinateur
Programmation évènementielle
Votre première interface graphique
Nous allons commencer par voir le code minimal pour créer une fenêtre avec Tkinter. Petit à
petit, nous allons apprendre à rajouter des choses, mais commençons par voir la base de code que l'on
retrouve d'une interface Tkinter à l'autre.
Étant en Python, ce code minimal est plutôt court :
pack() :Il place le widget enfant dans des blocs avant de le placer dans le widget parent.
Programmation évènementielle
Votre première interface graphique
Programmation évènementielle
Présentation de Tkinter
Bonjour le monde! (minimal)
Testons nos connaissances de base de tkinter en créant le classique "Hello,
World!" programme.
D'abord, il faut importer tkinter, cela variera selon la version
Maintenant que le module tkinter est importé, nous pouvons créer la racine de notre application
en utilisant la classe Tk :
Cela servira de fenêtre pour notre application.
Maintenant que nous avons une fenêtre, ajoutons-y du texte avec une Label
Programmation évènementielle
Une fois que l'application est prête, nous pouvons la démarrer (entrez la
boucle d' événement
principal ) avec la méthode mainloop
Programmation évènementielle
Définition
On appelle widget (mot valise, contraction de window et gadget) les
composants graphiques de base d’une bibliothèque
Tk fenêtre de plus haut niveau
Label zone de message
Programmation évènementielle
Votre première interface graphique
Nous allons commencer par voir le code minimal pour créer une fenêtre avec Tkinter. Petit à
petit, nous allons apprendre à rajouter des choses, mais commençons par voir la base de code que l'on
retrouve d'une interface Tkinter à l'autre.
Étant en Python, ce code minimal est plutôt court :
Programmation évènementielle
Présentation de Tkinter
Programmation évènementielle
Présentation de Tkinter
Widget : contraction de l'anglais windows gadget (gadget fenêtre). Les widgets sont
tous les objets graphiques que l'on peut insérer dans une interface (fenêtre).
Les principaux widgets sont :
Les boutons : Button (pour commander une action).
Les labels : Label (pour insérer un commentaire, une légende…).
Les zones de saisie : Entry (pour permettre l'entrée de données).
Les canevas : Canvas (pour insérer une zone graphique contenant un dessin ou une
image au format png).
Chaque widget a des propriétés et des méthodes qui permettent de régler son
apparence et les interactions avec l'utilisateur.
Une fois créé, le widget peut être configuré grâce à la méthode
config([options]) (consulter les liens fournis pour les options disponibles en fonction du
but recherché).
Programmation évènementielle
Présentation de Tkinter
Il existe divers contrôles, tels que des boutons, des étiquettes, des barres de
défilement, des boutons radio et des boîtes de texte utilisés dans une application GUI.
Ces petits composants ou contrôles de l'interface utilisateur graphique (GUI) sont
connus sous le nom de widgets dans Tkinter.
Programmation évènementielle
Présentation de Tkinter
Programmation évènementielle
Création de la fenêtre principale
Trois lignes de code permettent de créer une fenêtre.
Charger le module tkinter : from tkinter import *
Créer un objet-fenêtre et le stocker dans une variable :
nom_variable = Tk()
Ajouter du contenu (des widgets)
Appeler la méthode mainloop()
chargée de surveiller les événements clavier / souris :
nom_variable.mainloop()
Programmation évènementielle
Votre première interface graphique
Les attributs bg et fg permettent de définir les couleurs du fond (background)
et du premier plan (foreground).
La couleur peut être fournie en codage hexadécimal (base 16) : monAppli['bg']
= '#d88900'
La syntaxe geometry('300x100+200+250') permet de spécifier en plus des
dimensions de la fenêtre, sa position sur l'écran.
Programmation évènementielle
Votre première interface graphique
Tkinter possède un nombre n de méthodes qui ont été utilisées dans le
monde entier, c'est pourquoi geometry() est également l'une des méthodes par défaut
et peut être utilisé directement dans le widget d'exigences spécifiques et ces fonctions
seront appelées là où elles sont nécessaires. Il a sa propre syntaxe et ses paramètres
width:la largeur de la fenêtre en pixels.
Height: est la hauteur de la fenêtre en
pixels.
Le x est la position horizontale de la
fenêtre. Par exemple, +50 signifie que le
bord gauche de la fenêtre doit être à 50
pixels du bord gauche de l'écran. Et -50
signifie que le bord droit de la fenêtre
doit être à 50 pixels du bord droit de
l'écran.
Programmation évènementielle
Votre première interface graphique
La méthode geometry('L x H + x0 + y0') crée une fenêtre de largeur L, de
hauteur H dont le coin supérieur gauche a pour coordonnées (x0, y0).
Programmation évènementielle
Présentation de Tkinter
L'insertion d'un widget se fait en deux étapes :
1. Création de widget :
nom_variable = type_widget(nom_fenêtre, ...)
2. Placement dans la fenêtre (par l'une des trois méthodes pack(), grid() ou
place()) :
nom_variable.pack()
Un widget n'apparaît pas dans la fenêtre tant qu'il n'a pas été positionné
par l'une de ces méthodes.
Programmation évènementielle
Présentation de Tkinter
Trois méthodes sont disponibles pour positionner les widgets dans la
fenêtre :
pack() méthode rapide et simple à condition d'utiliser des cadres (frame).
grid() méthode basée sur un tableau.
place() méthode la plus fine (positionnement manuel des widgets).
Programmation évènementielle
Présentation de Tkinter
pack() :
La méthode pack() organise les widgets en blocs avant de les placer dans la fenêtre.
Elle est particulièrement utile lorsqu'on utilise des cadres (Frame) pour regrouper des widgets.
Les options courantes incluent side (côté), fill (remplissage), et expand (extension).
grid() :
La méthode grid() organise les widgets sous forme de grille (tableau) dans la fenêtre.
Elle est idéale lorsque vous avez besoin de disposer les widgets de manière plus structurée en lignes et colonnes.
On spécifie généralement les options de ligne (row), de colonne (column), et d'autres options pour définir la
disposition.
place() :
La méthode place() permet un positionnement plus précis des widgets en spécifiant explicitement les coordonnées.
Elle peut être utilisée pour un positionnement manuel, mais nécessite une attention particulière pour garantir la
flexibilité sur différentes tailles d'écrans.
On spécifie généralement les options x, y, width, et height.
Programmation évènementielle
Création de la fenêtre principale
Gestionnaires de positionnement
Tous les widgets Tkinter ont accès à des méthodes de gestion de géométrie
spécifiques, qui ont pour but d’organiser les widgets dans la zone de widget parent.
Tkinter expose les classes de gestionnaire de positionnement suivantes: pack, grid et
place.
•La méthode pack() : Ce gestionnaire de positionnement organise les widgets en blocs
avant de les placer dans le widget parent.
•La méthode grid() : Ce gestionnaire de positionnement organise les widgets dans une
structure semblable à une table dans le widget parent.
•La méthode place() : Ce gestionnaire de positionnement organise les widgets en les
plaçant dans une position spécifique dans le widget parent.
Programmation évènementielle
Création de la fenêtre principale
La méthode pack() organise les widgets dans des boîtes avant de les placer dans le conteneur
parent. Les widgets sont disposés en fonction des options spécifiées telles que side (côté), fill (remplissage), et
expand (extension)
Programmation évènementielle
Création de la fenêtre principale
La méthode grid() organise les widgets dans une grille. Vous spécifiez les lignes et les colonnes
dans lesquelles vous souhaitez placer les widgets. Cette méthode est particulièrement utile lorsque vous avez
une disposition tabulaire.
Programmation évènementielle
Création de la fenêtre principale
La méthode place() permet de positionner les widgets de manière absolue en spécifiant les
coordonnées x et y, ainsi que d'autres options telles que l'ancrage (anchor). Cette méthode est utile lorsque
vous avez besoin d'un contrôle précis sur la position des widgets.
Programmation évènementielle
Méthode pack()
fen1=Tk() crée la fenêtre qui s'appellera fen1.
[Link]() : nous activons ici la méthode pack() à l'objet tex1. Cette méthode agit
sur la disposition géométrique, la fenêtre maître est réduite automatiquement pour
qu'elle soit juste assez grande pour contenir les widgets esclaves.
[Link]() : c'est cette ligne qui provoque le démarrage du réceptionnaire
d'événements associé à la fenêtre.
Programmation évènementielle
Méthode pack()
Ce gestionnaire de géométrie organise les widgets en blocs avant de les placer dans le widget parent.
[Link]( pack_options )
Voici la liste des options possibles:
•expand : Lorsqu’il est défini sur true, le widget se développe pour remplir tout espace non utilisé
autrement dans le widget parent.
•fill : Détermine si le widget remplit tout espace supplémentaire qui lui est alloué par le parent, ou garde
ses propres dimensions minimales: NONE (par défaut), X (remplir horizontalement), Y (remplir
verticalement) ou BOTH (remplir à la fois horizontalement et verticalement ).
•side : Détermine le côté du widget parent: TOP (par défaut), BOTTOM, LEFT ou RIGHT.
Programmation évènementielle
Méthode pack()
Le gestionnaire de géométrie de pack agit sur la base du concept
d'utilisation de l'espace libre dans le widget parent. Lors de l'emballage,
vous pouvez spécifier à quelle extrémité de l'espace libre mettre le widget,
et comment il grandira avec ledit espace libre (à mesure que la fenêtre elle-
même grandit et
rétrécit).
Le gestionnaire de géométrie affecte ensuite des widgets dans
ledit espace libre, laissant aussi peu espace vide possible
Le gestionnaire de géométrie de pack est principalement contrôlé par trois
arguments de mots-clés : side,fill et expand
Programmation évènementielle
Méthode pack()
side:à quelle extrémité de l'espace disponible souhaitez-vous placer le widget ? les options
sont définies comme des constantes dans Tkinter, comme LEFT, RIGHT, TOP, et BAS.
Fill:Voulez-vous que le widget remplisse tout l'espace disponible autour de lui ? Les options
sont également des constantes : X ou Y. Elles sont cartésiennes, ce qui signifie que X est horizontal et Y
est verticale. Si vous souhaitez que le widget se développe dans les deux sens, utilisez les DEUX
constant.
expand :Le widget doit-il se redimensionner lorsque la fenêtre le fait ? Cet argument est un
Booléen, vous pouvez donc passer True ou 1 pour faire grandir le widget avec la fenêtre.
Programmation évènementielle
Méthode pack()
Par défaut, les widgets s'empilent les uns sous les autres, au centre de la
fenêtre. Si l'un d'eux est décalé par side=LEFT (ou side=RIGHT), il vient s'aligner sur
le bord gauche en s'extrayant du "flux" : les suivants reviennent par défaut s'aligner
en haut de la fenêtre.
Il est possible d'utiliser des cadres (Frame) pour regrouper des widgets et
réaliser des interfaces complexes.
Observer les exemples ci-dessous pour comprendre le fonctionnement de
pack() (la fenêtre principale s'appelle « app »). Cet exemple utilise des boutons mais
les principes restent les mêmes quels que soient les widgets.
Programmation évènementielle
Méthode pack()
padx et pady : ces attributs permettent de réserver un espace
autour du widget. Cet espace est exprimé en nombre de pixels : padx réserve
un espace à gauche et à droite du widget, pady réserve un espace au-dessus et
au-dessous du widget.
Syntaxe méthode pack()
[Link](side=RIGHT, padx =3, pady =3)
Les options padx et pady dans Tkinter sont utilisées pour spécifier la quantité d'espace (en
pixels) à ajouter autour du widget horizontalement (padx) et verticalement (pady). Ces options sont
souvent utilisées pour ajouter un espacement entre les bords du widget et son contenu.
Programmation évènementielle
Méthode pack()
.
Programmation évènementielle
Méthode pack()
.
Par ailleurs, il est possible d'adapter la taille d'un widget à son
conteneur (fenêtre ou cadre) via l'option fill. Avec fill=X, le widget occupe
tout l'espace horizontal disponible
Programmation évènementielle
Méthode place()
.
La syntaxe permet de spécifier la hauteur, la largeur ainsi que les coordonnées du
coin supérieur gauche du widget :
nom_variable.place(height=..., width=..., x=..., y=...)
Il organise les widgets en les plaçant sur une position spécifique comme indiqué
par le développeur
Rappel : lors de sa création, un widget est généralement stocké
dans une variable. C'est à cette variable qu'on applique la
méthode grid() ou place().
Programmation évènementielle
Création de la fenêtre principale
Programmation évènementielle
De nombreux widgets
Tkinter définit un grand nombre de widgets pouvant être utilisés
dans notre fenêtre.
Nous allons en voir ici quelques-uns.
Les widgets les plus communs
Les labels
C'est le premier widget que nous avons vu, hormis notre fenêtre
principale qui en est
un également. On s'en sert pour afficher du texte dans notre fenêtre, du texte
qui ne
sera pas modifié par l'utilisateur.
Programmation évènementielle
Les labels
Le widget Label peut être utilisé pour afficher une chaîne prédéfinie ou bien une
chaîne variable (i.e. modifiable après création du widget).
Syntaxes (cible désigne la fenêtre ou le cadre dans lequel l'étiquette doit être placée) :
Texte prédéfini, création en 1 étape :
nom_variable = Label(cible, text='...')
Texte variable, création en 3 étapes :
- sv = StringVar() (initialisation d'une variable de type str à l'aide de la
fonction tkinter StringVar()) ;
- nom_variable = Label(cible, textvariable=sv) ;
- [Link]('...') permet de modifier la chaîne affichée par l'étiquette.
Programmation évènementielle
Les labels
Exemple 1 : Label avec Texte
Programmation évènementielle
Les labels
text – Pour afficher une ou plusieurs ligne de texte dans une étiquette, indiquer une
chaîne de caractères qui contient le texte.
font – Si vous affichez du texte dans cette étiquette (avec l’option text ou
textvariable), cette option sert à préciser la police de caractères utilisée pour afficher
le texte
background – (ou bg) La couleur de fond de l’étiquette
foreground – (ou fg) Couleur d’avant plan de l’étiquette.
Programmation évènementielle
Les labels
[Link](x=60, y=40, width=100, height=30)
L'image suivante illustre l'influence de ces quatre arguments (x, y, largeur et
hauteur) sur la position et la taille du widget.
Programmation évènementielle
Le paramètre expand
Le paramètre expand permet de définir si le contrôle Widget remplit l'espace
supplémentaire du conteneur parent. La valeur par défaut est False (ou 0), indiquant qu'il
n'est pas rempli, ou si elle est True (ou 1). C'est important !
Programmation évènementielle
Le paramètre expand
Tous les boutons voient leur espace alloué augmenter, mais ne réagissent pas de
la même manière. Le bouton 1 continue à remplir tout l’espace horizontal mais se déplace
pour rester au centre de son espace verticalement. Pour le bouton 2 c’est l’opposé, il reste
au centre horizontalement mais remplit tout son espace verticalement. Enfin, le bouton 3
occupe tout l’espace qui lui est alloué.
Programmation évènementielle
Utilisation de l'option d'ancrage
L'ancre permet d'ancrer le widget au bord de l'espace alloué. Elle accepte l'une des
valeurs suivantes
L'image suivante illustre les options d'ancrage
Programmation évènementielle
Utilisation de l'option d'ancrage
Programmation évènementielle
Programmation évènementielle
Méthode pack()
Le gestionnaire de géométrie de pack agit sur la base du concept
d'utilisation de l'espace libre dans le widget parent. Lors de l'emballage,
vous pouvez spécifier à quelle extrémité de l'espace libre mettre le widget,
et comment il grandira avec ledit espace libre (à mesure que la fenêtre elle-
même grandit et
rétrécit).
Le gestionnaire de géométrie affecte ensuite des widgets dans
ledit espace libre, laissant aussi peu espace vide possible
Le gestionnaire de géométrie de pack est principalement contrôlé par trois
arguments de mots-clés : side,fill et expand
Programmation évènementielle
Méthode pack()
side:à quelle extrémité de l'espace disponible souhaitez-vous placer
le widget ? les options sont définies comme des constantes dans Tkinter,
comme LEFT, RIGHT, TOP, et BAS.
Fill:Voulez-vous que le widget remplisse tout l'espace disponible
autour de lui ? Les options sont également des constantes : X ou Y. Elles sont
cartésiennes, ce qui signifie que X est horizontal et Y est verticale. Si vous
souhaitez que le widget se développe dans les deux sens, utilisez les DEUX
constant.
expand :Le widget doit-il se redimensionner lorsque la fenêtre le
fait ? Cet argument est un Booléen, vous pouvez donc passer True ou 1 pour
faire grandir le widget avec la fenêtre.
Programmation évènementielle
Méthode pack()
Par défaut, les widgets s'empilent les uns sous les autres, au centre de la
fenêtre. Si l'un d'eux est décalé par side=LEFT (ou side=RIGHT), il vient s'aligner sur
le bord gauche en s'extrayant du "flux" : les suivants reviennent par défaut s'aligner
en haut de la fenêtre.
Il est possible d'utiliser des cadres (Frame) pour regrouper des widgets et
réaliser des interfaces complexes.
Observer les exemples ci-dessous pour comprendre le fonctionnement de
pack() (la fenêtre principale s'appelle « app »). Cet exemple utilise des boutons mais
les principes restent les mêmes quels que soient les widgets.
Programmation évènementielle
Méthode pack()
padx et pady : ces attributs permettent de réserver un espace
autour du widget. Cet espace est exprimé en nombre de pixels : padx réserve
un espace à gauche et à droite du widget, pady réserve un espace au-dessus et
au-dessous du widget.
Syntaxe méthode pack()
[Link](side=RIGHT, padx =3, pady =3)
Programmation évènementielle
Les boutons
Les boutons sont des widgets sur lesquels on peut cliquer et qui peuvent déclencher
des actions ou commandes comme nous le verrons ultérieurement plus en détail.
Le widget de bouton Tkinter est assez similaire au widget d’étiquette
Tkinter. Il a presque les mêmes options que celles de l’étiquette, sauf qu’il a une
option supplémentaire par défaut. Nous donnerons des détails sur cette option par
défaut après un exemple de bouton de base.
Vous pouvez générer deux boutons très simples en utilisant les codes de
démonstration ci-dessous.
Programmation évènementielle
button = [Link](container, text, command)
Les boutons
text – Le texte a afficher sur le bouton.
font – Police de caractère a utiliser pour le texte sur le bouton.
foreground – (ou fg), Couleur du texte.
background – (ou bg) Couleur de fond.
Programmation évènementielle
Les boutons
button = [Link](container, text, command)
Dans cette syntaxe :
Le conteneur est le composant parent sur lequel vous placez le bouton.
Le texte est le libellé du bouton.
La commande spécifie une fonction de rappel qui sera appelée
automatiquement lorsque le bouton sera cliqué.
Programmation évènementielle
Les boutons
Programmation évènementielle
Les boutons
Programmation évènementielle
Les boutons
L'option de commande de Tkinter Button définit la fonction ou la méthode à
appeler lorsque le bouton est cliqué.
Pour définir une fonction à exécuter lors d'un clic sur un bouton, définissez une
fonction Python et attribuez le nom de cette fonction à l'option de commande de
Button
Programmation évènementielle
Les boutons
Les styles du relief :
Les styles de reliefs définissent une représentation 3D aux bordures d’un widget, il existe cinq
styles de reliefs : FLAT, SUNKEN, RIDGE, GROOVE, RAISED.
Programmation évènementielle
Les boutons
Le style du curseur :
On peut modifier l’apparence du curseur en définissant le mot-clé cursor par une des valeurs
suivantes 'circle', 'tcross', 'arrow', 'mouse', 'cross', 'target', 'star', 'plus', 'clock', 'sizing', 'heart',
‘dot’, 'fleur' etc…
Programmation évènementielle
Les boutons
<Button-1> :
événement assosié au bouton gauche de la souris
<ButtonPress> :
événement associté à la fois au bouton gauche et droit de la souris.
<B1-Motion> :
événement associté au déplacement de la souris avec bouton gauche
enfoncé.
<ButtonRelease-1> :
événement au relachement du bouton gauche de la souris.
<Double-Button-1> :
événement associé au double-click au bouton gauche de la souris.
<Enter> :
événement qui se produit lorsque le pointeur de la souris est entré dans le
widget (cet événement ne signifie pas que l'utilisateur a appuyé sur la touch
Entrée!).
<Leave> :
événement qui se produit lorsque le pointeur de la souris quitte le widget.
Programmation évènementielle
Les boutons avec les 3 méthodes de placement
Méthode 2 : grid() avec rowspan
Fusionner une ou plusieurs lignes
Programmation évènementielle
Le conteneur est organisé comme une grille de cellules. Pour placer un widget dans
une cellule: [Link](row=valeur, column=valeur)
Au départ, on ne crée pas la grille en définissant un nombre de lignes ou de colonnes.
La grille est crée au momment où on y place des widgets. Si on place un widget dans
la cellule (1,1) et un autre dans la cellule (4, 3) alors une grille à quatre ligne et 3
colonnes est crée.
Programmation évènementielle
Les options du gestionnaire grid
Le repéré local est au centre de chaque widget par défaut. Il peut être précisé
grâce au champ sticky dont les valeurs sont dans l'ensemble N, S, E, W.
Un widget peut occuper plusieurs lignes (resp. colonnes) grâce au
champ rowspan (resp. columnspan).
Programmation évènementielle
Les options du gestionnaire grid
sticky a les valeurs valides suivantes
Programmation évènementielle
Les boutons avec les 3 méthodes de placement
Méthode 3 : place()
Voici la liste des options possibles :
anchor : L’emplacement exact du widget auquel les autres options se réfèrent: peut
être N, E, S, W, NE, NW, SE ou SW, la valeur par défaut est NW (le coin supérieur
gauche du widget)
bordermode : INSIDE (par défaut) pour indiquer que d’autres options font référence
à l’intérieur du parent (en ignorant la bordure du parent); OUTSIDE autrement.
height, width : Hauteur et largeur en pixels.
Programmation évènementielle
Gestionnaires de géométrie
Une fois une fenêtre créée, il faut placer ses
widgets à l’intérieur. Le placement de tout widget se
fait obligatoirement par l’intermédiaire d’un
gestionnaire de géométrie. Tkinter dispose de trois
gestionnaires de géométrie : pack, grid et place.
Voici un résumé des principales
caractéristiques de ces trois gestionnaires :
Bien noter que dans une fenêtre conteneur
donnée, on ne peut pas utiliser simultanément
les
gestionnaires pack et grid (une exception sera
levée).
Programmation évènementielle
Les Entry
Le widget Entry de Tkinter permet à l’utilisateur d’entrer une seule ligne de
texte qui n’a qu’un seul type de police. Si plus de lignes sont nécessaires, vous devriez
utiliser le widget Text de Tkinter. Le widget Entry peut aussi être utilisé pour afficher le
texte d’une seule ligne.
Le constructeur Entry() accepte de nombreux arguments (options d’apparence, …) dont
le plus important est la variable Tkinter, objet de type StringVar , permettant de lier de
façon dynamique le contenu de l’entrée au reste du programme.
Programmation évènementielle
Les Entry
Le widget Entry possède trois méthodes importantes.
nom_zoneSaisie.get() permet de lire/récupérer le contenu de la zone
de saisie.
nom_zoneSaisie.insert(i,s) permet d'insérer la chaîne s, à partir du
caractère d'index i de la zone de saisie (si une chaîne est déjà présente) ou à
partir du début sinon.
nom_zoneSaisie.delete(0,END) permet de supprimer la totalité de la
zone de saisie.
Programmation évènementielle
Les Entry
Réaliser l'interface suivante : lorsqu'on clique sur le
bouton, le mot de passe tapé dans la première zone de
saisie s'affiche dans la seconde.
L'attribut show permet de remplacer les caractères entrés par un symbole (ici le
symbole "*" usuel pour les mots de passe sous windows).
Programmation évènementielle
Les Entry
Réaliser l'interface suivante : lorsqu'on clique sur le
bouton, le mot de passe tapé dans la première zone de
saisie s'affiche dans la seconde.
Programmation évènementielle
Les Entry
Si nous voulons créer un espace entre les lignes ou les colonnes nous pouvons utiliser
pady et padx dans chacun d'eux nous indiquons la quantité d'espace désirée, exemple.
Programmation évènementielle
Les Entry
Dans cet exemple de code, nous avons un problème, lorsque nous changeons la
taille de la fenêtre, les widgets conservent leur taille, si nous voulons qu'ils s'étendent avec
la fenêtre, comme le montre l'image, nous devons faire ce qui suit.
Pour les widgets que nous voulons rendre
extensibles, nous ajoutons sticky= pour indiquer
à quelle position le widget est ancré, pour les
widgets d'entrée nous utilisons sticky=E+W
indiquant qu'ils sont ancrés à droite et à gauche
de la cellule, vous pouvez voir l'image avec les
différentes positions d'ancrage.
Programmation évènementielle
De nombreux widgets
Trois autres widgets sont fréquemment utilisés :
•les boutons radio (Radiobutton) : au minimum deux boutons (un
choix parmi plusieurs possibilités s'excluant mutuellement) ;
•les cases à cocher (Checkbutton) : une option (validée ou non) ;
•les listes déroulantes (Combobox du module ttk).
Programmation évènementielle
De nombreux widgets
Case à cocher :
Le widget Checkbutton est utilisé pour afficher un certain
nombre d’options à un utilisateur sous forme de case à cocher.
L’utilisateur peut alors sélectionner une ou plusieurs options en cliquant
sur le bouton correspondant à chaque option.
Programmation évènementielle
Bouton de contrôle
Programmation évènementielle
Case à cocher :
Option Description
activebackground Couleur d'arrière-plan lorsque le bouton de contrôle se trouve sous le
curseur.
Couleur de premier plan lorsque le bouton de contrôle se trouve sous le
activeforeground curseur
bg La couleur de fond normale affichée derrière l'étiquette et l'indicateur.
bd La taille de la bordure autour de l'indicateur. La valeur par défaut est de
2 pixels.
font La police utilisée pour le texte.
highlightcolor La couleur de la mise en évidence du focus lorsque le bouton de
contrôle a le focus.
offvalue Normalement, la variable de contrôle associée à un bouton de contrôle
est définie sur 0 lorsqu'il est effacé (désactivé). Vous pouvez fournir
une autre valeur pour l'état d'arrêt en définissant offvalue à cette valeur.
onvalue Normalement, la variable de contrôle associée à un bouton de
contrôle prend la valeur 1 lorsqu'il est activé (on). Vous pouvez
fournir une autre valeur pour l'état activé en définissant onvalue
comme cette valeur.
Programmation évènementielle
Bouton de contrôle
onvalue: renvoie la valeur fournie lorsque la case est cochée.
Offvalue : renvoie la valeur fournie lorsque la case n'est pas cochée
généralement onvalue=1 et offvalue=0
Programmation évènementielle
Bouton de contrôle
value est utilisé pour extraire la valeur de la case à cocher qui a
Get
été assignée lors de la création de la case à cocher
Cette valeur peut être : Integer, String, ou Booleans.
IntVar() utilisé pour obtenir des valeurs entières
StringVar() est utilisé pour obtenir des valeurs de chaîne
est utilisé pour obtenir des valeurs
BooleanVar() booléennes, c'est-à-dire vrai ou faux.
Programmation évènementielle
Bouton de contrôle
Chaque bouton de contrôle doit être associé à une variable. Le type de
données de la variable est déterminé par le bouton de contrôle lorsqu’il est
sélectionné/désélectionné.
il définit la valeur d’origine du bouton de contrôle. Comme il est juste assigné avec le
type de données boolean, vous n’avez que deux options ici, True ou False.
grid est un autre type de gestionnaire de disposition Tkinter en plus du pack introduit
dans la section Tkinter Label.
Programmation évènementielle
Bouton de contrôle
onvalue: renvoie la valeur fournie lorsque la case est cochée.
Offvalue : renvoie la valeur fournie lorsque la case n'est pas cochée
généralement onvalue=1 et offvalue=0
Programmation évènementielle
Bouton de contrôle
deselect() :Cette méthode est appelée pour désactiver la case à cocher.
Programmation évènementielle
Bouton de contrôle
Programmation évènementielle
Bouton de contrôle
Programmation évènementielle
Boutons radio :
- sv = StringVar() (initialisation d'une variable de type str à l'aide de la
fonction tkinter StringVar()) ;
- [Link](valeur) permet de modifier la chaîne valeur associée au choix du
bouton coché ;
- Radiobutton(cible, text='...', variable=sv, value=valeur1,
command=fonction) (command=fonction permet d'associer une fonction à un
changement d'état des boutons) ;
- Radiobutton(cible, text='...', variable=sv, value=valeur2,
command=fonction).
Programmation évènementielle
Radiobutton
Le Radiobuton est un bouton de type unique. Il a plus d’une option dans la
sélection, mais l’utilisateur ne peut sélectionner qu’une seule d’entre elles. Comme les
widgets introduits auparavant, le Radibuton peut contenir du texte ou des images et
peut y associer une fonction ou une méthode de rappel. Cette fonction de rappel se
déclenche automatiquement lorsque l’on appuie sur ce bouton.
Programmation évènementielle
Radiobuton
Radiobutton
Programmation évènementielle
Radiobutton
Programmation évènementielle
Combobox
Tkinter Combobox est la liste déroulante dans laquelle l’utilisateur
peut choisir. C’est une combinaison de Entry et de widgets drop-down
comme vous pouvez le voir. Lorsque vous cliquez sur la flèche sur le côté
gauche, vous verrez un menu déroulant montrant tous les choix, et si vous
cliquez sur l’un d’entre eux, il remplacera le contenu actuel de Entry.
Dans Tkinter, la combobox est
implémentée à l'aide du module ttk
(themed Tkinter)
Le widget Tkinter combobox est dans le module ttk de Tkinter, donc, vous devez
importer ce module pour utiliser ce widget.
Programmation évènementielle
Combobox
Liste déroulante (dans le module ttk) :
- sv = StringVar() (initialisation d'une variable de type str à l'aide de la
fonction tkinter StringVar()) ;
- nom_variable = [Link](cible, textvariable=sv) ;
- nom_variable['values'] = (valeur1, valeur2, valeur3...) (liste des
chaînes de la liste) ;
- nom_variable.current(n) permet de choisir la chaîne affichée dans la
liste (où n est l'index de l'une des valeurs de la liste) ;
- événement associé à un changement de sélection dans la liste :
nom_variable.bind('<<ComboboxSelected>>', fonction).
Programmation évènementielle
Combobox
Pour créer un widget combobox, vous utiliserez le constructeur [Link]
Programmation évènementielle
Combobox
Associer une action à la liste combobox ( bind action)
La méthode bind est utilisée pour associer un gestionnaire d'événements à un widget dans
Tkinter. Pour une Combobox (liste déroulante), vous pouvez utiliser la méthode bind pour associer des
événements tels que la sélection d'un élément dans la liste déroulante.
on crée une action liée ( bind action) à l'aide de la commande
[Link]("<<ComboboxSelected>>", action)
Programmation évènementielle