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

发布于 2021-01-29 15:21:28

我在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

它仍然可以在某种意义上起作用,即该小部件会根据其他小部件的搜索结果来更新结果,但是会出现错误。

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

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

关注者
0
被浏览
51
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您可以在分配给的过程中保留有关的通知options

    with search_result.hold_trait_notifications():
        search_result.options = titles
    

    从而:

    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()
        with search_result.hold_trait_notifications():
            search_result.options = titles
    

    请参阅下面的hmelberg解释

    “错误的根源是该窗口小部件还具有value属性,并且该值可能不在新的选项列表中。因此,窗口小部件的值可能会在短时间内被“孤立”,从而产生错误。”



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看