Получить значение нескольких CheckButton с одинаковым именем переменной tkinter python - PullRequest
1 голос
/ 22 мая 2019

У меня есть функция, которая создает словарь в зависимости от файла, который пользователь вводит в параметр.

А потом я создаю GUI, который создает столько CheckButtons, сколько элементов в словаре.

Вот мой код:

for element in self.listdiagram.dict_diagrams :
    self.diagramVar = IntVar()
    self.diagram = Checkbutton(self.window, text=element, variable=self.diagramVar, onvalue=1, offvalue=0)
    self.diagram.pack(side = BOTTOM)
self.validate = Button(self.window, text="Validate", command=self.validateCallBack, width=15, height=3)
self.validate.pack(side = BOTTOM)

Проблема в том, что я не могу получить доступ к состоянию определенной кнопки, поскольку они имеют одинаковое имя переменной. И я не знаю, как я могу назвать их по-другому.

Я пытался создать имя переменной с именем диктитарного элемента с setattr(self, element, 0) или с exec, но это не сработало, потому что str(element) может быть очень длинным.

Как я могу это сделать?

Спасибо за помощь.

1 Ответ

2 голосов
/ 22 мая 2019

Очень простой способ исправить это - использовать список и просто добавить каждый Checkbutton в список.

Например:

self.diagramVars = []

for element in self.listdiagram.dict_diagrams :
    diagramVar = IntVar()
    diagram = Checkbutton(self.window, text=element, variable=diagramVar, onvalue=1, offvalue=0)
    diagram.pack(side = BOTTOM)

    self.diagramVars.append(diagramVar)

self.validate = Button(self.window, text="Validate", command=self.validateCallBack, width=15, height=3)
self.validate.pack(side = BOTTOM)

Q:На данный момент я просто хочу напечатать состояние каждой кнопки проверки, когда я нажимаю кнопку подтверждения, но мой следующий шаг, например, если у меня есть self.diagramVars = [1, 0, 0], так что первый checkButton проверен, и поэтому я хочузапустить другую функцию с именем (или текстом) проверенного checkButton в параметре, я не знаю, ясно ли я?

Я считаю, что это цикл for, который создает словарь сelement в качестве ключа будет подходящим решением (если element может использоваться в качестве опции text=element, тогда его можно использовать в качестве ключа):

self.diagramVars = {}

for element in self.listdiagram.dict_diagrams :
    diagramVar = IntVar()
    diagram = Checkbutton(self.window, text=element, variable=diagramVar, onvalue=1, offvalue=0)
    diagram.pack(side = BOTTOM)

    self.diagramVars[element] = diagramVar

self.validate = Button(self.window, text="Validate", command=self.validateCallBack, width=15, height=3)
self.validate.pack(side = BOTTOM)

Когда высоздайте этот словарь, чтобы получить значение CheckButton, вы будете использовать строку diagramVars[element].get(), которая будет обращаться к состоянию "реального времени" CheckButton

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