我在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)
Run Code Online (Sandbox Code Playgroud)
这曾经可以正常工作,但是在更新到最新版本的ipywidgets(4.0.1的5.1.3)之后,
search_selection.options = titles
Run Code Online (Sandbox Code Playgroud)
产生以下错误(一个或两个,不同):
TraitError: Invalid selection
TypeError: 'list' object is not callable
Run Code Online (Sandbox Code Playgroud)
它仍然可以在某种意义上起作用,即该小部件会根据来自其他小部件的搜索结果来更新结果,但是会出现错误。
根据另一个窗口小部件的结果在一个窗口小部件中设置选项的正确方法是什么?
(编辑:添加了更详细的错误消息)
我想在Jupyter Notebook中创建2个下拉窗口小部件。下拉内容取自数据框。
假设我有一个由3个类别变量“ a”,“ b”,“ c”组成的熊猫数据框。'a'具有3个子类型'a1','a2'和'a3'。'b'和'c'在也具有自己的子类型的意义上类似于a。我想创建2个下拉窗口小部件:第一个下拉窗口小部件将具有['a','b','c'],第二个下拉窗口小部件将显示子类型,具体取决于用户为第一个窗口小部件选择的变量。
老实说,我不知道该怎么做。我将尝试为此编写一些代码:
import pandas as pd
from IPython.display import *
import ipywidgets as widgets
from ipywidgets import *
# Create the dataframe
df = pd.DataFrame([['a1','a2','a3'],
['b1','b2','b3'],
['c1','c2','c3']], index = ['a','b','c']).transpose()
# Widgets
widget1 = Dropdown(options = ['a','b','c'])
display(widget1)
widget2 = Dropdown(???????)
display(widget2)
Run Code Online (Sandbox Code Playgroud)
根据我为两个下拉小部件选择的内容,我希望执行一些功能。
任何帮助表示赞赏。