如何为Tkinter标签建立索引?解决批量标签后期配置问题
解决Tkinter标签后期无法重新配置的问题
Hey there! 我明白你遇到的困扰了——你在循环里创建多个标签时,每次都用同一个变量名ll229,这就导致这个变量最后只会指向最后一个创建的标签,而不是你以为的包含所有标签的列表。所以你用ll229[3].config()肯定行不通,因为它根本不是列表嘛!
问题根源
在你的循环代码里,每次迭代都会执行ll229 = Label(...),这相当于把ll229变量重新赋值给新的Label对象,之前创建的标签实例没有被保存下来,自然没法通过索引访问它们。
解决方案:用列表存储所有标签实例
你需要提前创建空列表,每次创建完标签后就把它添加到对应列表里,这样后续就能通过索引访问任意一个标签并修改它了。
修改后的代码示例:
# 提前创建空列表,用来保存所有标签实例 ll229_list = [] ll33_list = [] ll44_list = [] def update_ref_str(): for i in range(ref_counter): ref_codes_str[i].set(ref_codes[i]) ref_obj_per_codes_str[i].set(ref_obj_per_code[i]) ref_time_needed_str[i].set(ref_time_needed_per_task[i]) # 创建标签后添加到对应列表 ll229 = Label(f2, textvariable=ref_codes_str[i], bg='springgreen2', fg="gray23") ll229.config(font=("Helvetica", 13)) ll229.place(bordermode=OUTSIDE, height=18, width=100, x=573, y=100 + 20*i ) ll229_list.append(ll229) ll33 = Label(f2, textvariable=ref_obj_per_codes_str[i], bg='springgreen2', fg="gray23") ll33.config(font=("Helvetica", 13)) ll33.place(bordermode=OUTSIDE, height=18, width=59, x=677, y=100 + 20*i) ll33_list.append(ll33) ll44 = Label(f2, textvariable=ref_time_needed_str[i], bg='springgreen2', fg="gray23") ll44.config(font=("Helvetica", 13)) ll44.place(bordermode=OUTSIDE, height=18, width=58, x=740, y=(100 + 20*i)) ll44_list.append(ll44)
后期修改标签的方法
比如你想修改第3个标签(注意Python列表索引从0开始,所以第3个对应索引2)的背景色,可以这样写:
# 修改ll229系列的第3个标签背景色为红色 ll229_list[2].config(bg='red')
这样就能轻松对任意一个已创建的标签进行后期配置啦!
内容的提问来源于stack exchange,提问作者Aksel2099
相关产品推荐
相关产品推荐

