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

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方法时会出现属性不存在的报错。
修复方案

对应修改两处代码即可:

  1. 为Label的文本参数显式加上text=前缀
  2. 将__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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:27:02