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

Python3.8中循环创建Tkinter Combobox时如何修正列表追加的长度异常问题

解决方案

问题根源

当前问题核心是每次选中下拉框选项时都调用append()往结果列表新增元素,没有区分不同下拉框对应的存储位置,因此长度会持续增长。

修改思路

  • 提前初始化和下拉框数量一致的固定长度结果列表,用索引将每个下拉框和列表的对应位置绑定
  • 每次选中事件触发时,直接修改对应索引位置的值,不再追加新元素

修改后代码

from tkinter import  ttk
from tkinter import Tk
from tkinter import Button, StringVar, Label

root = Tk()
my_heroes = ['Zidane', 'Ronaldo', 'Messi']
position = ['The One!', 'more or less','the bad']
# 初始化固定长度的结果列表,长度和下拉框数量一致
result = [None] * len(my_heroes)

# 新增index参数,用于定位对应下拉框的存储位置
def get_combo_choice(event, cmb, index):
    result[index] = cmb.get()
    print(result)
    
def callback():
    print(result)

for index, heroe in enumerate(my_heroes):
    var = StringVar()
    bestPlayers = ttk.Combobox(root,values=position, textvariable=var, state="readonly")
    bestPlayers.grid(row=0 + index, column=1,padx=(15,25))
    
    label = Label(root, text = heroe)
    label.grid(row=0 + index, column=0,padx=(15,25))

    # 绑定时传入当前下拉框对应的索引
    bestPlayers.bind("<<ComboboxSelected>>",lambda event, cmb=var, idx=index:get_combo_choice(event, cmb, idx))

button = Button(root, text ="get list of choices", command = callback)
button.grid(row=4, column=0,padx=(15,25))

root.mainloop()

效果说明

修改后结果列表长度始终等于下拉框数量,每次修改任意下拉框的选项,只会更新列表中对应索引位置的值,最终直接读取result即可拿到所有下拉框的最新选择结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:27:00