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

动态更新ttkwidgets AutocompleteCombobox的completevalues列表

结论

ttkwidgets.AutocompleteCombobox 原生支持动态设置条目列表,联动失效、抛出TypeError: config() takes 1 positional argument but 2 were given报错均为调用方式错误导致,并非组件不支持该能力。

报错根因

两个常见错误写法会触发该问题:

  • 给config()方法传选项列表时用了位置参数,没有指定values=关键字参数。AutocompleteCombobox重写了配置方法,不接受选项列表作为位置参数传入,这一点和部分场景下原生ttk.Combobox的容错写法不兼容。
  • 仅更新了组件values配置,没有同步更新组件内置的自动补全候选池,导致下拉选项、补全逻辑和实际配置不匹配。
正确实现方式
  • 给第一个组合框绑定<<ComboboxSelected>>虚拟事件,选中值变化时触发联动更新逻辑
  • 事件回调中根据第一个组合框的当前值,筛选出第二个组合框对应的候选列表
  • 用关键字参数的形式更新第二个组合框的values配置,同时调用组件自带的set_completion_list()方法同步补全词库,最后清空第二个组合框的残留旧值

可直接运行的参考代码:

import tkinter as tk
from ttkwidgets.autocomplete import AutocompleteCombobox

# 定义两级选项的映射关系
option_mapping = {
    "省份": ["广东省", "浙江省", "江苏省"],
    "直辖市": ["北京市", "上海市", "重庆市", "天津市"],
    "自治区": ["内蒙古自治区", "广西壮族自治区", "西藏自治区"]
}

root = tk.Tk()

# 一级选择框
combo_level1 = AutocompleteCombobox(root, values=list(option_mapping.keys()))
combo_level1.pack(padx=20, pady=10)

# 二级联动选择框
combo_level2 = AutocompleteCombobox(root)
combo_level2.pack(padx=20, pady=10)

def sync_level2_options(event=None):
    current_selected = combo_level1.get()
    target_options = option_mapping.get(current_selected, [])
    # 用关键字参数更新下拉选项,禁止直接传列表作为位置参数
    combo_level2.config(values=target_options)
    # 同步更新自动补全的内置候选池
    combo_level2.set_completion_list(target_options)
    # 清空上一次选择的残留值
    combo_level2.set("")

# 绑定选中事件触发联动
combo_level1.bind("<<ComboboxSelected>>", sync_level2_options)

root.mainloop()
注意事项
  • 禁止使用combo.config(选项列表)的位置参数传参写法,必须写成combo.config(values=选项列表),否则会直接触发你遇到的类型错误
  • set_completion_list()是AutocompleteCombobox独有的方法,原生ttk.Combobox不需要这一步,替换组件后必须补上,否则输入时的自动补全不会匹配新的选项列表
  • 如果需要联动后默认选中二级框的第一个选项,在更新逻辑末尾加combo_level2.current(0)即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 21:06:21