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

如何获取for循环动态创建的Tkinter滑块组件取值

解决方案

循环生成组件时复用单个变量存储组件对象,会导致前序生成的组件引用被覆盖,最终只能访问到最后一个组件。直接用字典绑定题目ID和滑块组件的引用,就能精准读取每个滑块的取值。


具体改动步骤

  • 提前初始化用于存储滑块对象的字典,键直接复用题目字典的Q_1/Q_2等ID,保证题目和滑块一一对应
  • 循环创建滑块时,将生成的CTkSlider实例直接存入字典对应键位,不要用单个临时变量反复赋值
  • 需要收集评分时,遍历存储滑块的字典,逐个调用.get()方法即可拿到所有题目的评分,结果可以直接存为字典或者列表

修改后可直接运行的代码

from tkinter import *
from customtkinter import *

root = CTk()
root.geometry("400x550")

SlideAsk = {"Q_1":"This is my question 1.", 
    "Q_2":"This is my question 2.",
    "Q_3":"This is my question 3.",
    "Q_4":"This is my question 4."}

# 初始化存储滑块对象的字典
slider_dict = {}
startrow = 0

def CreateSlider(question_bank):
    global startrow
    for q_id, q_text in question_bank.items():
        # 绘制题干
        label_Question = CTkLabel(master=root, text=q_text)
        label_Question.grid(row=startrow, column=0, columnspan=1, pady=10, padx=10, sticky="w")
        startrow += 1
        # 创建滑块并存入字典,键为题目ID
        SliderQ = CTkSlider(master=root, from_=1, to=5, number_of_steps=4)
        SliderQ.grid(row=startrow, column=0, columnspan=2, pady=10, padx=20, sticky="w")
        # 设置滑块默认值为评分区间最小值1
        SliderQ.set(1)
        slider_dict[q_id] = SliderQ
        startrow += 1

def get_all_score():
    # 遍历滑块字典收集所有结构化评分
    score_result = {}
    for q_id, slider in slider_dict.items():
        score_result[q_id] = slider.get()
    print("所有题目的评分:", score_result)
    return score_result

CreateSlider(SlideAsk)
# 新增提交按钮触发取值逻辑,可根据自己的业务需求替换触发时机
submit_btn = CTkButton(master=root, text="提交获取评分", command=get_all_score)
submit_btn.grid(row=startrow, column=0, pady=20, padx=20)

root.mainloop()

用法说明

运行后拖动各个滑块调整评分,点击提交按钮,控制台就会输出类似{'Q_1': 3.0, 'Q_2': 5.0, 'Q_3': 2.0, 'Q_4': 1.0}的结构化结果,你可以直接把这个结果存到本地文件或者传入后续处理逻辑。如果不需要绑定题号,只需要按题目顺序拿到所有评分的列表,直接用列表推导式[slider.get() for slider in slider_dict.values()]即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 08:48:31