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

Tkinter中使用字典存储单选按钮变量的异常问题

Tkinter Radiobutton 字典存储StringVar返回PY_VAR0问题解决

问题描述

将tk.StringVar()类型的对象存入字典后,作为Radiobutton的variable参数使用时,相关输出返回的是PY_VAR0而非预期的字符串值。

异常代码示例

import tkinter as tk

root = tk.Tk()

variables = dict()
variables['Language']=tk.StringVar()

def cb():
    print(variables.get('Language'))
    

for Lang in ('English', 'German', 'French'):
    tk.Radiobutton(root, text=Lang, variable=variables['Language'], value=Lang, command=cb).pack()

root.mainloop()

正常运行代码示例(单个变量存储)

import tkinter as tk

root = tk.Tk()

Language=tk.StringVar()

def cb():
    print(Language.get())
    

for Lang in ('English', 'German', 'French'):
    tk.Radiobutton(root, text=Lang, variable=Language, value=Lang, command=cb).pack()

root.mainloop()

问题原因与修复

问题出在回调函数cb()的打印逻辑上:你直接打印了字典中存储的StringVar对象实例,而非调用它的get()方法获取实际存储的字符串值。

当你直接打印tk.StringVar实例时,Python会输出它的内部标识(比如PY_VAR0),这并不是它存储的目标字符串。而在正常代码中,你调用了Language.get(),这才是获取变量存储值的正确方式。

只需修改回调函数中的打印语句,为字典取出的StringVar对象添加get()方法即可:

修正后的代码

import tkinter as tk

root = tk.Tk()

variables = dict()
variables['Language']=tk.StringVar()

def cb():
    # 调用get()方法获取实际字符串值
    print(variables.get('Language').get())
    

for Lang in ('English', 'German', 'French'):
    tk.Radiobutton(root, text=Lang, variable=variables['Language'], value=Lang, command=cb).pack()

root.mainloop()

运行修正后的代码,点击单选按钮就能正常输出对应的语言字符串了。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 10:31:07