Tkinter创建RadioButton触发TypeError:string indices must be integers求助
问题原因
代码一共存在2处核心错误,触发报错的是第一处:
- 第一处错误:创建
Label控件时没有显式指定text参数,直接把文本字符串作为第二个位置参数传入。Tkinter控件构造函数的第二个位置参数是接收配置字典的cnf,tkinter内部会尝试对该参数做字典取值操作,传入字符串自然会触发TypeError: string indices must be integers报错。 - 第二处错误:类中声明了
StringVar类型的实例属性v,但__init__中创建的单选框绑定变量是局部变量var,没有赋值给self.v,后续调用getValue方法时会出现属性不存在的报错。
修复方案
对应修改两处代码即可:
- 为
Label的文本参数显式加上text=前缀 - 将
__init__中创建的StringVar变量赋值给实例属性self.v
修复后完整代码
from tkinter import Checkbutton, Radiobutton, StringVar, Tk, Label, IntVar class Enabler: b1: Radiobutton b2: Radiobutton v: StringVar def __init__(self, tk: Tk, r: int, c: int): # 修复点1:显式指定text参数 Label(tk, text=" username/email and password required?").grid(row=r, column=c) # 修复点2:将变量赋值给实例属性self.v self.v = StringVar(tk, "active") self.v.set("active") modes = [ ("Yes", "active"), ("No", "disabled") ] tmp_c: int = c + 1 # 此处加1避免单选框和Label重叠,可按需调整 for k, v in modes: Radiobutton(tk, text=k, value=v, variable=self.v, command=self.getValue).grid(row=r, column=tmp_c) tmp_c += 1 def getValue(self) -> str: print(self.v.get()) return self.v.get() tk = Tk() e = Enabler(tk, 0, 0) tk.mainloop()
内容的提问来源于stack exchange,提问作者Finley Adams
相关产品推荐
相关产品推荐

