Как сделать каждую радиопереключатель уникальной среди других в tkinter - PullRequest
0 голосов
/ 03 января 2019

У меня есть окно в Tkinter, которое выглядит так: enter image description here

Когда я нажимаю на кнопку в первом ряду, она остается. Однако, когда я нажимаю кнопку во втором ряду, она отменяет выбор, который я выбрал выше.

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

for i in studentList:
    Label(left,text=i[0][::]+' ' + i[1][::],fg='black',bg='#dbdbdb',font=('Arial',11,'bold')).grid(row=counter,column=0,pady=13,sticky='news')
    P = Radiobutton(right,text='Present',bg='#56ab32',fg='black',value='P'+str(counter),indicatoron = 0,font=('Arial',12,'bold'))
    P.grid(row=counter,column=0,pady=10,padx=20,sticky='news')
    L = Radiobutton(right,text='Leave',bg='#e6a800',fg='white',indicatoron = 0,value='L'+str(counter),font=('Arial',12,'bold'))
    L.grid(row=counter,column=1,pady=10,padx=20,sticky='news')
    Radiobutton(right,text='Absent',bg='#bd2900',fg='white',indicatoron = 0,value='A'+str(counter),font=('Arial',12,'bold')).grid(row=counter,column=2,pady=10,padx=20,sticky='news')
    counter+=1

1 Ответ

0 голосов
/ 03 января 2019

Радиокнопки работают, назначая двум или более радиокнопкам один и тот же экземпляр одного из специальных переменных объектов tkinter - обычно StringVar или IntVar. Это совместное использование переменной - это то, что заставляет группу радиокнопок работать как набор, поскольку переменная может содержать только одно значение.

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

Чтобы ваш код работал, каждая строка должна использовать свой собственный экземпляр StringVar. Это будет выглядеть примерно так:

vars = []
for i in studentList:
    var = StringVar()
    vars.append(var)
    ...
    Radiobutton(right, variable=var, ...)
    Radiobutton(right, variable=var, ...)
    Radiobutton(right, variable=var, ...)
    ...

С учетом вышеизложенного вы можете получить выбор каждой строки, получив значение переменной для этой строки. Например, первая строка будет vars[0].get(), вторая строка будет vars[1].get() и т. Д.

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