Tkinter中使用字典存储单选按钮变量的异常问题
问题描述
将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
相关产品推荐
相关产品推荐

