Comment puis-je créer plusieurs cases à cocher à partir d'une liste dans une boucle for en python tkinter
J'ai une liste de longueur variable et que vous voulez créer une case à cocher (avec python TKinter) pour chaque entrée dans la liste (chaque entrée correspond à une machine qui doit être activée ou désactivée avec la case -> modifier la valeur dans le dictionnaire).
print enable
{'ID1050': 0, 'ID1106': 0, 'ID1104': 0, 'ID1102': 0}
(exemple, peut être n'importe quelle longueur)
maintenant le code:
for machine in enable:
l = Checkbutton(self.root, text=machine, variable=enable[machine])
l.pack()
self.root.mainloop()
Ce code génère 4 cases, mais ils sont tous soit coché ou décoché ensemble et les valeurs de la enable
dict ne changent pas. Comment le résoudre? (Je pense que la l
ne fonctionne pas, mais la façon de faire de cette variable?)
Vous devez vous connecter pour publier un commentaire.
La "variable" passé à chaque checkbutton doit être une instance de la Variable Tkinter - comme il est, il est juste la valeur "0" qui est passé, et ce qui provoque le missbehavior.
Vous pouvez créer le Tkinter.La Variable d'instances sur il de même pour la boucle de créer le checkbuttons il suffit de changer votre code:
Vous pouvez alors vérifier l'état de chaque case à cocher à l'aide de son
get
méthode que dansenable["ID1050"].get()
print enable[machine].get() AttributeError: 'int' object has no attribute 'get'
j'ai Donc essayé:print app.enable[machine].get() AttributeError: 'MyTkApp' object has no attribute 'enable'
(app est l'objet de la tkinter classe appelée MyTkApp) Et quand je le fais sans l'obtenir:print enable[machine] PY_VAR0
def read(self, machine): return enable[machine].get()
puis à l'extérieur de la classe, vous pouvez par exemple appeler juste:print app.read(1050)
Juste pensé que je vous ferais partager mon exemple, pour une liste au lieu d'un dictionnaire:
Espère que cela aide