Как ограничить пользователя одной контрольной кнопкой, проверенной tkinter python

Я создал графический интерфейс с несколькими контрольными кнопками (количество контрольных кнопок случайное, оно зависит от файла, который пользователь ранее ввел в качестве параметра).

И поэтому я хотел бы знать, возможно ли ограничить пользователя одной проверкой флажков сразу.

Я знаю, что могу создавать радиокнопки, но дело в том, что у меня есть одна и та же переменная и одинаковое значение для радиокнопок, и когда я использую радиокнопки, я могу отметить обе кнопки и не могу их снять. Вот мой код:

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

Группа радиокнопок должна иметь одну и ту же переменную, чтобы они работали правильно (и иметь разные value= параметры, чтобы вы могли сказать, какой из них был выбран).

jasonharper 22.05.2019 17:12

Радиокнопки специально разработаны, чтобы дать пользователю возможность сделать один выбор из группы. С точки зрения удобства использования кнопка-флажок может ввести пользователя в заблуждение.

Bryan Oakley 22.05.2019 17:28
Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair
Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair
Анализ настроения текстовых сообщений может быть настолько сложным или простым, насколько вы его сделаете. Как и в любом ML-проекте, вы можете выбрать...
7 лайфхаков для начинающих Python-программистов
7 лайфхаков для начинающих Python-программистов
В этой статье мы расскажем о хитростях и советах по Python, которые должны быть известны разработчику Python.
Установка Apache Cassandra на Mac OS
Установка Apache Cassandra на Mac OS
Это краткое руководство по установке Apache Cassandra.
Сертификатная программа "Кванты Python": Бэктестер ансамблевых методов на основе ООП
Сертификатная программа "Кванты Python": Бэктестер ансамблевых методов на основе ООП
В одном из недавних постов я рассказал о том, как я использую навыки количественных исследований, которые я совершенствую в рамках программы TPQ...
Создание персонального файлового хранилища
Создание персонального файлового хранилища
Вы когда-нибудь хотели поделиться с кем-то файлом, но он содержал конфиденциальную информацию? Многие думают, что электронная почта безопасна, но это...
Создание приборной панели для анализа данных на GCP - часть I
Создание приборной панели для анализа данных на GCP - часть I
Недавно я столкнулся с интересной бизнес-задачей - визуализацией сбоев в цепочке поставок лекарств, которую могут просматривать врачи и...
0
2
113
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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()

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

Lucas 23.05.2019 09:36

Я редактирую исходный пост со скриншотом того, как это выглядит

Lucas 23.05.2019 09:46

@ Лукас, о, извини, да, я случайно забыл удалить строку кода, у меня все еще была определена диаграммаVar внутри, теперь она должна работать.

MatthewG 23.05.2019 10:06

Перед вашим ответом я попробовал это, и это решило проблему обоих выбранных, но теперь обе переменные равны (я поместил скриншот в конец моего исходного сообщения!)

Lucas 23.05.2019 10:12

@ Лукас, я объяснил это в своем ответе. Это связано с тем, что радиокнопки теперь используют одну и ту же переменную IntVar(), и поэтому теперь intVar представляет, какая радиокнопка нажата, а не то, нажата ли сама радиокнопка.

MatthewG 23.05.2019 10:19

нет возможности с радиокнопками иметь 0 для всех неотмеченных радиокнопок и i для радиокнопки, которая выбрана?

Lucas 23.05.2019 10:27

Все в порядке, спасибо! как я уже сказал, я постараюсь сделать: if diagramVar.get() = 1 so i pick the data of the element 1 in the dictionnary

Lucas 23.05.2019 10:30

Другие вопросы по теме