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
Pourtant le Spinbox fonctionne mais le Scale me renvoie l'erreur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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()
Evidemment, si je fais l'inverse, c'est Spinbox qui marche plus
Code : Sélectionner tout - Visualiser dans une fenêtre à part TypeError: Compute() takes 0 positional arguments but 1 was given
D'où ma question:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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()
- 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.
Partager