weixin_43936620 2019-06-03 11:20 采纳率: 100%
浏览 1925
已采纳

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 2020年博客之星Top3 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)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 扩散模型sd.webui使用时报错“Nonetype”
  • ¥15 stm32流水灯+呼吸灯+外部中断按键
  • ¥15 将二维数组,按照假设的规定,如0/1/0 == "4",把对应列位置写成一个字符并打印输出该字符
  • ¥15 NX MCD仿真与博途通讯不了啥情况
  • ¥15 win11家庭中文版安装docker遇到Hyper-V启用失败解决办法整理
  • ¥15 gradio的web端页面格式不对的问题
  • ¥15 求大家看看Nonce如何配置
  • ¥15 Matlab怎么求解含参的二重积分?
  • ¥15 苹果手机突然连不上wifi了?
  • ¥15 cgictest.cgi文件无法访问