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

如何在选中Combobox选项时同步调用两个自定义函数

问题分析
  • 你的实现思路有两处核心错误:
    1. combo_Campionato['values']是用来设置下拉框可选值列表的属性,只能接收选项集合,不适合在这里调用过滤函数。你当前的写法相当于给这个属性赋值了一个(选项列表, 过滤结果)的元组,完全不符合该属性的预期输入格式。
    2. 你定义的filtra_campionato要求传入campionato参数,但调用时没有传参,所以触发参数缺失的报错;另外函数内部你又通过combo_Campionato.get()取了一次选中值,这个入参本身属于冗余设计,还有函数末尾return results存在笔误,你前面定义的变量名是result,多写的s会触发名称错误。
修正方案

你要实现「选中下拉选项时同时运行两个函数」的需求,应该把两个函数的调用放到下拉框选中事件的回调函数中,具体修改如下:

步骤1:修正两个函数的冗余/错误逻辑

def combo_campionati():
    # 该函数用于加载所有联赛选项,不需要提前获取选中值
    cursor.execute('SELECT Nome_Campionato FROM ARCHIVIO_CAMPIONATI')
    result = [row[0] for row in cursor]
    return result

def filtra_campionato(): 
    # 去掉冗余入参,直接获取当前选中的联赛值
    campionato = combo_Campionato.get()
    cursor.execute('SELECT * FROM ARCHIVIO_Risultati WHERE campionato=?', (campionato,))
    result = [row[0] for row in cursor]
    # 修正笔误,和前面的变量名保持一致
    return result

步骤2:修改下拉框初始化和事件绑定逻辑

# Combobox Campionati
lbl_Campionato = Label(root, text="Campionato", font=("Calibri", 11), bg="#E95420", fg="white")
lbl_Campionato.place(x=6, y=60)
combo_Campionato = ttk.Combobox(root, font=("Calibri", 11), width=30, textvariable=campionato, state="readonly")
combo_Campionato.place(x=180, y=60)
combo_Campionato.set("Seleziona campionato")
# values只接收下拉选项列表,去掉过滤函数调用
combo_Campionato['values'] = combo_campionati()

# 定义统一的选中事件回调,同时运行你需要的两个函数
def on_campionato_selected(event):
    # 如果选中时需要刷新下拉选项就保留这行,不需要可以删掉
    combo_Campionato['values'] = combo_campionati()
    # 调用过滤函数,拿到过滤结果后补充你需要的网格刷新逻辑即可
    filtered_data = filtra_campionato()
    # 保留你原来的combo_squadre逻辑
    combo_squadre(event)

# 绑定选中事件到新的回调函数
combo_Campionato.bind('<<ComboboxSelected>>', on_campionato_selected)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 04:27:01