weixin_43936620
2019-06-03 11:20
采纳率: 100%
浏览 1.7k

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条回答 默认 最新

  • LaoYuanPython 2019-06-04 10:05
    已采纳

    你这个问题我也没完全找到解决办法,但可以通过如下方法解决:
    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)
    
    点赞 评论

相关推荐 更多相似问题