Я создал графический интерфейс с несколькими контрольными кнопками (количество контрольных кнопок случайное, оно зависит от файла, который пользователь ранее ввел в качестве параметра).
И поэтому я хотел бы знать, возможно ли ограничить пользователя одной проверкой флажков сразу.
Я знаю, что могу создавать радиокнопки, но дело в том, что у меня есть одна и та же переменная и одинаковое значение для радиокнопок, и когда я использую радиокнопки, я могу отметить обе кнопки и не могу их снять. Вот мой код:
for element in self.listdiagram.dict_diagrams:
diagramVar = IntVar()
diagram = Radiobutton(self.window, text=element, variable=diagramVar, value=1)
diagram.pack(side=BOTTOM, expand=1)
self.diagramVars[self.listdiagram.dict_diagrams.get(element)] = diagramVar
self.validate = Button(self.window, text = "Validate", command=self.validateCallBack, width=15, height=3)
self.validate.pack(side=BOTTOM, expand=1)
У меня есть код, который работает с флажками, но я не знаю, как ограничиться одним проверенным.
Спасибо за помощь !
Обновлено: вот как это выглядит, значение в порядке, но оба отмечены, и я не могу снять их, хотя радиокнопки были, когда я проверял один, другой не отмечен.
https://i.stack.imgur.com/yKJt8.png
Изображение 2: https://i.stack.imgur.com/iOnNV.png
Радиокнопки специально разработаны, чтобы дать пользователю возможность сделать один выбор из группы. С точки зрения удобства использования кнопка-флажок может ввести пользователя в заблуждение.
Q: I know i can create radiobuttons but the fact is i have same variable and same value for radiobuttons and when i use radiobuttons i can check both buttons and i can't uncheck them.
Radiobuttons
работают немного иначе, чем Checkbuttons
. С помощью переключателей вы можете создавать «группы», в которых можно выбрать только одну группу. Вы делаете это так, чтобы все Radiobuttons
использовали одно и то же IntVar()
в качестве своего поля variable=
, а затем каждый Radiobutton
имел другое значение.
Вы можете сделать это в цикле, используя enumerate for loop
, например:
diagramVars = {}
diagramVar = IntVar()
for i, element in enumerate(self.listdiagram.dict_diagrams):
diagram = Radiobutton(self.window, text=element, variable=diagramVar, value=i)
diagram.pack(side=BOTTOM, expand=1)
self.diagramVars[self.listdiagram.dict_diagrams.get(element)] = diagramVar
self.validate = Button(self.window, text = "Validate", command=self.validateCallBack, width=15, height=3)
self.validate.pack(side=BOTTOM, expand=1)
Для этого вам не понадобится словарь, так как значение IntVar будет выбрано RadioButton.
Например. Если выбрано Radiobutton
#1, то diagramVar.get()
вернет 0, если выбрано Radiobutton
#2, то diagramVar.get()
вернет 1 и т. д. Это связано с тем, что группы переключателей должны быть одинаковыми IntVar()
Спасибо, но у меня такая же странная проблема. когда я запускаю свое приложение, один из переключателей уже выбран, и если я отмечаю другой, они оба остаются отмеченными, и я не могу отменить их выбор
Я редактирую исходный пост со скриншотом того, как это выглядит
@ Лукас, о, извини, да, я случайно забыл удалить строку кода, у меня все еще была определена диаграммаVar внутри, теперь она должна работать.
Перед вашим ответом я попробовал это, и это решило проблему обоих выбранных, но теперь обе переменные равны (я поместил скриншот в конец моего исходного сообщения!)
@ Лукас, я объяснил это в своем ответе. Это связано с тем, что радиокнопки теперь используют одну и ту же переменную IntVar(), и поэтому теперь intVar представляет, какая радиокнопка нажата, а не то, нажата ли сама радиокнопка.
нет возможности с радиокнопками иметь 0 для всех неотмеченных радиокнопок и i
для радиокнопки, которая выбрана?
Все в порядке, спасибо! как я уже сказал, я постараюсь сделать: if diagramVar.get() = 1 so i pick the data of the element 1 in the dictionnary
Группа радиокнопок должна иметь одну и ту же переменную, чтобы они работали правильно (и иметь разные
value=
параметры, чтобы вы могли сказать, какой из них был выбран).