python TK 通过循环生成的单选框,如何获取每个选项的值

因为要输出多道题目所以我才用循环添加Radiobutton
但发现这样其中的command后接的函数中var.get()没有值了
没办法获取选择的值
请问这怎么解决 后面还要判断对错计算成绩
大致问题如下

import tkinter as tk

window = tk.Tk()  # 实例化一个窗口
window.title('my window')  # 定义窗口标题
window.geometry('400x600')  # 定义窗口大小
l = tk.Label(window, bg='yellow', width=20, height=2, text='empty')
l.pack()

def print_selection():
    l.config(text='you have selected' + var.get())  # 让对象l显示括号里的内容
    print(var.get())

for j in range(10):
    var = tk.StringVar()
    for text, value in [('option A', 'A'), ('option B', 'B'),('option C', 'C')]:
        r1 = tk.Radiobutton(window, text=text, variable=var, value=value, command=print_selection)
        r1.pack()  # 将参数A传入var
window.mainloop()

1个回答

你这个问题我也没完全找到解决办法,但可以通过如下方法解决:
1、首先是事件绑定不能放在按钮定义时绑定,因为这样绑定无法取得点击的组件信息,而是应以单独的bind语句来绑定;
2、直接通过按钮定义来获取文本存在问题,而应该通过选择的组件来获取选择的文本;
3、通过字典可以记录选择文本与选择组件之间的对应关系。
为了说明问题,我去掉了一个for j in range(10)循环,来说明相关实现,代码如下:

```import tkinter as tk

window = tk.Tk() # 实例化一个窗口
window.title('my window') # 定义窗口标题
window.geometry('400x600') # 定义窗口大小
l = tk.Label(window, bg='yellow', width=20, height=2, text='empty')
l.pack()

def print_selection(event=None):
choice=event.widget['text'] #event为鼠标事件捕获的信息对象,包括选择组件的信息,获得组件上面的文字,其实还可以直接获得组件的ID等
l.config(text='you have selected' + choice) # 让对象l显示括号里的内容
print('choice=',choice,'var[choice]=',var[choice],'btn[choice]=',btn[choice]) #var[choice]没有捕获到数据

var={} #这个确认没有办法捕获选择内容,其实可以不要
btn={} #记录选择文字和按钮的对应关系字典

for text, value in [('option A', 'A'), ('option B', 'B'),('option C', 'C')]:
var[text]=tk.StringVar() #试图捕获选择内容的变量字典,经验证确认没有用
r1 = tk.Radiobutton(window, text=text, variable= var[text], value=value)# 将参数A传入var[text]
r1.pack()

r1.bind('', print_selection) #绑定鼠标左键单击事件
btn[text]=r1 #记录选择文字与组件的对应关系
window.mainloop()

执行截图如下:
![图片说明](https://img-ask.csdn.net/upload/201906/04/1559613946_560271.jpg)
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问