You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过变量获取Python字典对应值 解决Tkinter单选按钮取值问题

问题解决方法

你遇到的是Python循环中创建回调函数的经典延迟绑定问题。循环中的answers变量会在每次迭代时被覆盖,循环结束后answers会固定为最后一个遍历的字典键(也就是"Snake"),所有按钮触发回调时读取的都是这个最终值,因此不管点击哪个选项都只会返回3。

以下是两种可行的修改方案:

方案1:通过回调参数绑定当前选项值

利用lambda的默认参数在定义时求值的特性,把每次迭代的answers或num值绑定到回调函数上:
首先修改处理函数,接收选中的选项参数:

def quiz_processAnswer(selected_answer):
    # 传入选项名的情况,查字典得数值
    print(values.get(selected_answer))
    # 如果直接绑定num作为参数,直接打印即可,不需要查字典:
    # def quiz_processAnswer(selected_num):
    #     print(selected_num)

然后修改循环中创建Radiobutton的command参数:

for (answers, num) in values.items():
    Radiobutton(
        master, text = answers,
        variable     = v,
        value        = num,
        indicator    = 0,
        background   = "darkslategray",
        fg           = "goldenrod",
        # 绑定当前迭代的answers值到参数ans
        command      = lambda ans=answers: quiz_processAnswer(ans)
        # 如果要直接传数值就写成:
        # command = lambda n=num: quiz_processAnswer(n)
    ).pack(fill = X, ipady = 5)

方案2:直接读取单选按钮绑定的变量值(更简便)

你已经给所有单选按钮绑定了同一个IntVar变量v,选中某个按钮时v会自动被赋值为对应按钮的value属性,也就是你字典里存储的数值,不需要额外传参也不需要查字典:

def quiz_processAnswer():
    # 直接读取绑定变量的值即可得到对应数值
    print(v.get())

注意你需要提前初始化v变量(你原有代码应该已经写了这步,没写的话加上即可):

v = IntVar()

内容的提问来源于stack exchange,提问作者TheWitheredStriker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 16:54:03