J'utilise Tkinter
dans une application GUI de base de Python 2.7 et je souhaite récupérer le statut du widget Checkbutton
en utilisant un IntVar
mais j'obtiens l'erreur suivante.Récupérer Tkinter Checkbutton Statut: TclError: impossible de lire "PY_VAR": aucune variable de ce type
TclError: can't read "PY_VAR": no such variable
J'ai suivi l'exemple sur effbot about the Checkbutton Widget et je me sers d'un IntVar
différent pour chaque bouton et en utilisant une fonction callback
d'imprimer la variable en appelant la fonction getvar
sur les boutons.
Mon seul objectif est d'afficher un état du widget Checkbutton
. J'utilise le gestionnaire de géométrie de grille Tkinter pour placer les widgets sur l'interface graphique. Voici un exemple MCVE qui produit l'erreur.
#!/usr/bin/env python
import Tkinter as tk
class Frame(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master)
self.buttons = dict() #number to button widget
self.createWidgets(master)
def printvar(self, button_number):
print self.buttons[button_number].getvar()
def createWidgets(self,master):
for n in range(0,4):
var = tk.IntVar()
button = tk.Checkbutton(
master,
variable=var,
command=lambda bn=n: self.printvar(bn)
)
button.grid(row=0, column=n)
self.buttons[n] = button
window = Frame(tk.Tk())
window.mainloop()
Le code fait quatre touches numériques qui passent le nombre à une fonction lambda
qui recherche le bouton dans un dict
et appelle sa fonction getvar
correspondante.
Si vous exécutez l'exemple de code, l'erreur suivante se produit lorsque vous vérifiez l'un des quatre boutons. Il est dans un fichier nommé tktest.py
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1540, in __call__
return self.func(*args)
File "./tktest.py", line 20, in <lambda>
command=lambda bn=n: self.printvar(bn)
File "./tktest.py", line 12, in printvar
print self.buttons[button_number].getvar()
File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 513, in getvar
return self.tk.getvar(name)
TclError: can't read "PY_VAR": no such variable
Il n'y a pas de variable var
pour chaque bouton et je demande donc la méthode getvar
. Toute autre méthode permettant de vérifier chaque état du widget Checkbutton
serait également acceptable.
Vous avez raison, je modifier la réponse – riojano0
va essayer, vous le ferons savoir –