Option command avec la fonction Scale de tkinter
Bonjour,
Dans une formation Python, j'en suis arrivé à l'interface graphique. J'apprécie PySide2 et les commandes Qt mais vraiment, oui vraiment, je lui préfère la bibliothèque tkinter que je trouve mille fois plus simple.
Histoire de goûts et de couleurs.
Voulant vérifier que les attributs "connexion" existaient bien sur tkinter, je me suis attaqué à un petit programme que j'avais déjà en script shell. Le programme n'a aucun intérêt ici sauf celui de reporter une difficulté que je n'arrive pas à surmonter.
Dans les commandes Spinbox, Scale, RadioButton ..., il y a l'option command qui permet d'effectuer une action quand on change un état (utilisation bouton radio, modification des valeurs du Scale ou du Spinbox, +++).
Dans la majeur partie des cas tout va bien sauf pour Scale. En effet, il semblerait que les options soient différentes car là où toutes les commandes acceptent le syntaxe command=Compute, Scale attende des arguments.
Un bon exemple vaut bien des discours.
Dans ce code j'utilise l'option command de la même manière
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| from tkinter import *
fenetre=Tk()
def Compute():
print(S.get(),D.get())
S=IntVar()
D=IntVar()
Spinbox(fenetre, from_=12, to=200, textvariable=D, command=Compute).pack(fill=X)
Scale(fenetre, orient='horizontal', from_=30, to=40, resolution=2, tickinterval=1, variable=S, length=200, label="Scale", command=Compute).pack(fill=X)
fenetre.mainloop() |
Pourtant le Spinbox fonctionne mais le Scale me renvoie l'erreur
Code:
TypeError: Compute() takes 0 positional arguments but 1 was given
Evidemment, si je fais l'inverse, c'est Spinbox qui marche plus
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| from tkinter import *
fenetre=Tk()
def Compute(Z):
print(S.get(),D.get())
S=IntVar()
D=IntVar()
Z=IntVar()
Spinbox(fenetre, from_=12, to=200, textvariable=D, command=Compute).pack(fill=X)
Scale(fenetre, orient='horizontal', from_=30, to=40, resolution=2, tickinterval=1, variable=S, length=200, label="Scale", command=Compute).pack(fill=X)
fenetre.mainloop() |
D'où ma question:
- il y a-t-il une différente de syntaxe de l'option command suivant le cas d'utilisation ?
- est-ce (peut-être) un bug avéré ?
- ma bible de référence est celle-ci. En avez-vous une autre à me conseiller ?
Merci de vos retours.