FAQ Python
FAQ PythonConsultez toutes les FAQ
Nombre d'auteurs : 11, nombre de questions : 188, dernière mise à jour : 14 juin 2021
Une première méthode est de renseigner l'attribut command du widget Tk.Button. Cet attribut
est associé à une fonction sans paramètre. Il est important de ne pas mentionner les void () lors de cette
association.
On peut également utiliser la fonction bind, cf Comment associer un évènement clavier/souris à un widget ?.
import
Tkinter as
Tk
def
clic
(
):
print
'Clic gauche sur le bouton'
root =
Tk.Tk
(
)
button =
Tk.Button
(
root, text =
'toto'
, command =
clic)
button.pack
(
)
root.mainloop
(
)
Le passage d'arguments à l'action associée à un Tkinter.Button peut être utile si vous avez plusieurs Button qui pointent sur la même fonction
ou encore que la fonction appelée par le clic sur le bouton ait besoin d'un argument que celle-ci ne peut connaître d'elle-même.
Par défaut, le paramètre command d'un Button nécessite une fonction sans argument. Vous pouvez cependant utiliser les fonctions
lambdas pour passer des arguments supplémentaires.
La syntaxe d'une expression lambda est la suivante:
mafonction = lambda argument:expression où argument est la liste des arguments de ma fonction et expression
l'expression retournée par la fonction.
exemple:
f1 =
lambda
x: x +
5
print
f1
(
9
) ## 14
f2 =
lambda
x, y =
5
: x *
y
f2
(
6
) ## 30
def
multiplie
(
x, y): print
x *
y
f3 =
lambda
x, y:multiplie
(
x, y)
f3
(
7
, 3
) ## 21
Pour utiliser les expressions lambda avec un Button, les arguments devront obligatoirement avoir une valeur par défaut vu que le clic sur un bouton ne peut apporter de valeurs aux paramètres de l'expression lambda. Si vous voulez pouvoir modifier ces valeurs aux cours du programme il faudra soit utiliser des variables modifiables soit redéfinir le paramètre command
import
Tkinter as
Tk
def
AfficheLabel
(
txt):
label.config
(
text =
txt)
root =
Tk.Tk
(
)
label =
Tk.Label
(
root, text =
"Clic sur le bouton "
)
label.grid
(
row =
0
, column =
0
, columnspan =
3
)
svEntry =
Tk.StringVar
(
)
edit =
Tk.Entry
(
root, textvariable =
svEntry)
edit.grid
(
row =
1
, columnspan =
3
)
btn1 =
Tk.Button
(
root, text =
"Button1"
, command =
lambda
x=
1
:AfficheLabel
(
"Clic sur le bouton "
+
str(
x)))
btn2 =
Tk.Button
(
root, text =
"Button2"
, command =
lambda
x=
2
:AfficheLabel
(
"Clic sur le bouton "
+
str(
x)))
btn3 =
Tk.Button
(
root, text =
"Button3"
, command =
lambda
x=
svEntry:AfficheLabel
(
"valeur de l'entry: "
+
x.get
(
)))
btn1.grid
(
row =
2
, column =
0
)
btn2.grid
(
row =
2
, column =
1
)
btn3.grid
(
row =
2
, column =
2
)
root.mainloop
(
)