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

如何让magicgui的ComboBox选项依赖于另一个ComboBox的当前值?

如何让magicgui的ComboBox选项依赖于另一个ComboBox的当前值?

嗨,这个需求在magicgui里实现起来真的很简单,刚好你已经注意到choices参数可以用函数作为输入——这就是实现联动的核心!

我直接给你一个完整的示例代码,咱们边看边说:

from magicgui import magicgui

# 定义一个函数,用来根据第一个下拉框的值返回第二个下拉框的选项
def get_second_options(first_choice):
    # 这里可以根据实际需求写逻辑,比如从文件/数据库取数都没问题
    if first_choice == "水果":
        return ["苹果", "香蕉", "橙子", "草莓"]
    elif first_choice == "蔬菜":
        return ["白菜", "萝卜", "西兰花", "黄瓜"]
    elif first_choice == "主食":
        return ["米饭", "面条", "馒头", "面包"]
    else:
        return []

# 用magicgui创建界面,关键是第二个ComboBox的choices绑定上面的函数
@magicgui(
    first_choice={"choices": ["水果", "蔬菜", "主食"]},
    second_choice={"choices": get_second_options}
)
def my_widget(first_choice, second_choice):
    # 这里可以写选中后的逻辑,比如打印选中的值
    print(f"你选了:{first_choice} -> {second_choice}")

# 显示界面
my_widget.show(run=True)

关键要点说明:

  • 函数get_second_options的参数名first_choice必须和第一个控件的参数名完全一致,这样magicgui才能自动把第一个下拉框的当前值传递给这个函数,实现动态关联。
  • 完全不用手动写事件绑定!magicgui会自动监听第一个下拉框的数值变化,一旦它改变,就会立刻调用get_second_options函数更新第二个下拉框的选项,这一点真的很省心。
  • 如果你的选项来源比较复杂(比如从API获取、从本地文件读取),只需要把逻辑写到get_second_options里就行,界面部分完全不用动,完美实现业务逻辑和界面逻辑的分离。

你可以把上面的代码复制跑一下,就能看到效果啦——选第一个下拉框的不同选项,第二个下拉框的内容会跟着自动变化~

备注:内容来源于stack exchange,提问作者Niklas Netter

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 19:29:33