Как создать несколько флажков из списка в цикле for в Python Tkinter - PullRequest
8 голосов
/ 16 декабря 2011

У меня есть список переменной длины и я хочу создать флажок (с python TKinter) для каждой записи в списке (каждая запись соответствует машине, которая должна быть включена или выключена с помощью флажка -> изменить значение в словарь).

print enable
{'ID1050': 0, 'ID1106': 0, 'ID1104': 0, 'ID1102': 0}

(например, может быть любой длины)

теперь соответствующий код:

for machine in enable:
    l = Checkbutton(self.root, text=machine, variable=enable[machine])
    l.pack()
self.root.mainloop()

Этот код создает 4 флажка, но все они отмечены или не отмечены вместе, и значения в тексте enable не изменяются. Как решить? (Я думаю, что l не работает, но как сделать эту переменную?)

Ответы [ 2 ]

16 голосов
/ 16 декабря 2011

«Переменная», передаваемая каждой кнопке проверки, должна быть экземпляром переменной Tkinter - поскольку она передается просто как значение «0», и это вызывает неправильное поведение.

Вы можете создавать экземпляры Tkinter.Variable в одном и том же цикле, когда вы создаете кнопки-флажки - просто измените свой код на:

for machine in enable:
    enable[machine] = Variable()
    l = Checkbutton(self.root, text=machine, variable=enable[machine])
    l.pack()

self.root.mainloop()

Затем вы можете проверить состояние каждого флажка, используя метод get, как в enable["ID1050"].get()

1 голос
/ 16 марта 2014

Просто подумал, что поделюсь своим примером для списка вместо словаря:

from Tkinter import *

root = Tk()    

users = [['Anne', 'password1', ['friend1', 'friend2', 'friend3']], ['Bea', 'password2', ['friend1', 'friend2', 'friend3']], ['Chris', 'password1', ['friend1', 'friend2', 'friend3']]]

for x in range(len(users)):
    l = Checkbutton(root, text=users[x][0], variable=users[x])
    print "l = Checkbutton(root, text=" + str(users[x][0]) + ", variable=" + str(users[x])
    l.pack(anchor = 'w')

root.mainloop()

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...