如何在tkinter中使每个单选按钮与众不同

时间:2019-01-03 14:40:40

标签: python python-3.x tkinter radio-button

我在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 :(得分:-1)

单选按钮的工作方式是为两个或多个单选按钮分配tkinter特殊变量对象之一的同一实例-通常为StringVarIntVar。变量的共享使得一组单选按钮可以作为一个集合工作,因为变量只能容纳一个值。

因为您没有分配变量,所以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(),依此类推。