#python #python-3.x #pandas #widget #ipywidgets
Вопрос:
Я пытаюсь создать динамическую фильтрацию с помощью Ipywidgets. Слово «динамический» здесь относится к: если опция выбрана в одном виджете, это повлияет на выбор остальных виджетов.
Вот набор игрушечных данных для целей репликации.
toy_data = pd.DataFrame({"LETTER": ["A", "B", "A","B","A", "B", "A","B"],
"PLANT": ["Orange", "Carrots", "Lemon","Potato","Pomelo","Yam","Lime","Radish"],
"NUMBER": [1,2,3,4,5,6,7,8]})
Создание виджетов:
letter_var = widgets.Dropdown(
description="Letter: ",
options=toy_data.LETTER.unique(),
value="A",
)
def letter_filtering(change):
clear_output(wait = True)
letter = letter_var.value
new_toy_data = toy_data[toy_data.LETTER == str(letter)]
plant_var = widgets.Dropdown(description="Plant: ", options=new_toy_data.PLANT.unique(), value="Orange")
return plant_var
функция letter_filtering предназначена для фильтрации вариантов в вигетах для растений. То есть, если для letter_var была выбрана буква B, то выбор в plant_var будет ограничен только буквой B. но при реализации,
widgets.HBox([letter_var,letter_filtering])
Я получаю ошибку признака.
TraitError: The 'children' trait of a HBox instance contains an Instance of a TypedTuple which expected a Widget, not the function 'letter_filtering'.
Я думаю, что не знаю, как это сделать.
Комментарии:
1. виджеты. HBox ожидает получить список виджетов. letter_var-это виджет, но letter_filtering-это функция. Вам необходимо определить виджет plant_var вне функции letter_filtering, и когда в виджете letter_var делается выбор, вы должны вызвать функцию letter_filtering при выборе, чтобы установить значение виджета plant_var. Как и сейчас, в то время как функция letter_filtering возвращает виджет (plant_var), функция никогда не вызывается! Если вы попытаетесь переписать свой код и обновить его здесь, я буду рад помочь вам, если у вас возникнут какие-либо проблемы. Надеюсь, это поможет!