Comment obtenir l'état d'une case à cocher Tkinter? Par État, je veux dire si oui ou non il a une coche dedans.
Lorsque vous le créez, il prend un argument de mot clé variable
. Passez-lui un IntVar
de Tkinter
. Cochez ou décochez la case pour définir la valeur contenue par var
à l'état booléen correspondant. On peut y accéder comme var.get()
:
vérifié => var.get()
non cochée => not var.get()
>>> root = Tkinter.Tk()
>>> var = Tkinter.IntVar()
>>> chk = Tkinter.Checkbutton(root, text='foo', variable=var)
>>> chk.pack(side=Tkinter.LEFT)
>>> var.get() #unchecked
0
>>> var.get() #checked
1
Si vous utilisez le nouveau* module ttk de tkinter, vous pouvez lire et écrire les états des boutons de contrôle sans affecter de variables.
import tkinter
from tkinter import ttk
tkwindow = tkinter.Tk()
chk = ttk.Checkbutton(tkwindow, text="foo")
chk.grid(column=0, row=0)
Notez que la nouvelle case à cocher par défaut est "alternative", parfois appelée "semi-cochée":
Vous pouvez lire l'état actuel en utilisant la méthode .state ():
>>> print(chk.state()) # half-checked
('alternate',)
>>> print(chk.state()) # checked
('selected',)
>>> print(chk.state()) # not checked
()
Pour définir l'état dans le code:
chk.state(['selected']) # check the checkbox
chk.state(['!selected']) # clear the checkbox
chk.state(['disabled']) # disable the checkbox
chk.state(['!disabled','selected']) # enable the checkbox and put a check in it!
Et voici un moyen pratique de vérifier un état spécifique:
chk.instate(['selected']) # returns True if the box is checked
Il y a deux choses délicates que j'ai trouvées:
L'état initial est "alternatif" et cet indicateur d'état n'est pas effacé lors de l'ajout d'un indicateur d'état "sélectionné". Donc, si vous voulez basculer votre bouton de contrôle dans le code, vous devez d'abord effacer le drapeau "alternatif":
chk.state(['!alternate'])
Si vous désactivez/activez le bouton de contrôle à l'aide de
chk.state(['disabled'])
chk.state(['!disabled'])
alors tout fonctionne bien. Mais, si vous utilisez ces méthodes alternatives courantes:
chk.config(state=tk.DISABLED)
chk.config(state=tk.NORMAL)
puis il réaffirme le drapeau "alternatif".
Ce problème ne se produit pas si vous affectez une variable au bouton de contrôle, mais si vous souhaitez attribuer une variable, cette réponse ne vous aidera probablement pas :)
* ttk est devenu disponible en Python 2.7 (Tk 8.5). Cette question parle des différences entre les anciens widgets standard et les plus récents, "thématiques").