gpt4 book ai didi

python - ipywidgets:根据另一个小部件的结果更新一个小部件

转载 作者:行者123 更新时间:2023-12-02 08:13:26 26 4
gpt4 key购买 nike

我在 IPython 中使用小部件,它允许用户重复搜索短语并在另一个小部件(选择小部件)中查看结果(不同的标题),然后选择其中一个结果。

简而言之:

search_text = widgets.Text(description = 'Search') 
search_result = widgets.Select(description = 'Select table')

def search_action(sender):
phrase = search_text.value
df = search(phrase) # A function that returns the results in a pandas df
titles = df['title'].tolist()
search_result.options = titles

search_text.on_submit(search_action)

这曾经工作正常,但是在更新到最新版本的 ipywidgets(从 4.0.1 到 5.1.3)之后,它看起来像

search_selection.options = titles

产生以下错误(一个或两个,情况不同):

TraitError: Invalid selection
TypeError: 'list' object is not callable

从某种意义上说,它仍然有效,即该小部件根据其他小部件的搜索结果更新结果,但它会给出错误。

根据另一个小部件的结果在一个小部件中设置选项的正确方法是什么?

(编辑:添加了更详细的错误消息)

最佳答案

我一小时前就遇到了这个问题。我使用这里的最小示例编写了一个解决方案:Dynamically changing dropdowns in IPython notebook widgets and Spyre ,因为我自己的要求是拥有动态链接列表。我相信您将能够使用此解决方案来适应您的要求。

关键是预先生成所有下拉菜单/选择。由于某种原因,w.options = l 仅设置 w._options_labels 而不是 w.options。随后对 w 所选值的验证将严重失败。

import ipywidgets as widgets
from IPython.display import display

geo={'USA':['CHI','NYC'],'Russia':['MOW','LED']}
geoWs = {key: widgets.Select(options=geo[key]) for key in geo}

def get_current_state():
return {'country': i.children[0].value,
'city': i.children[1].value}

def print_city(**func_kwargs):
print('func_kwargs', func_kwargs)
print('i.kwargs', i.kwargs)
print('get_current_state', get_current_state())

def select_country(country):
new_i = widgets.interactive(print_city, country=countryW, city=geoWs[country['new']])
i.children = new_i.children

countryW = widgets.Select(options=list(geo.keys()))
init = countryW.value
cityW = geoWs[init]

countryW.observe(select_country, 'value')

i = widgets.interactive(print_city, country=countryW, city=cityW)

display(i)

最后请注意,获取小部件的最新状态并非易事。这些是

  • 通过get_current_state直接从子项的值中获取。这是可以信任的。
  • 来自交互式实例,通过i.kwargs
  • 从提供的参数到print_city

后两者有时可能会过时,由于各种原因我不想进一步了解。

希望这有帮助。

关于python - ipywidgets:根据另一个小部件的结果更新一个小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37144216/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com