如何解决ipywdigets中的下拉菜单
我想使用ipywidgets添加一个下拉框。我有一个带有Pandas DataFrame的函数,想通过下拉菜单选择要显示的行数。我有这个:
get_forwards = interactive(
get_forwards,{"manual": True,"manual_name": "Forwards"},)
get_forwards
与此:
widgets = [get_squad,get_goalkeepers,get_defenders,get_midfielders,get_forwards]
names = ["squad","Goalkeepers","Defenders","Midfielders","Forwards"]
view = Tab(widgets)
for i in range (len(view.children)):
view.set_title(i,names[i])
view
如果可能的话,我想在每个标签上添加一个下拉框。有人可以帮忙吗?
解决方法
我怀疑您因建立互动而陷入困境。我们将深入探讨如何解决编程中这一具有挑战性但又令人兴奋的方面。
第1步:创建示例数据
如果我们能模仿您期望的结果,那么我们这里的人们将无济于事。我在下面为您创建了一个示例。
import pandas as pd
data = [
{"Position":"Goalkeeper","Name":"Sam","Team":"Blue"},{"Position":"Defender","Name":"Rob",{"Position":"Goalkeeper","Name":"Sara","Team":"Red"},"Name":"Sue","Name":"Alex","Team":"Orange"},"Name":"Amy","Name":"Fifi","Team":"Purple"},"Name":"Farrell",]
df = pd.DataFrame.from_records(data)
第2步:为要过滤的字段构建交互式小部件
当然,您可以将它们添加到interact
方法中,但这不是最佳实践+它不能提供精细的控制。这是我为您构建的一些小部件:
from ipywidgets import widgets
# Multi-Select
position_widget = widgets.SelectMultiple(
options=df["Position"].unique(),value=[df["Position"].unique()[1]],description="Position",)
team_widget = widgets.SelectMultiple(
options=df["Team"].unique(),value=[df["Team"].unique()[1]],description="Team",)
# Choose how many rows you want
n_widget = widgets.IntSlider(
value=len(df),min=1,max=len(df),step=1,description='Max rows?',disabled=False,continuous_update=False,# Only update when the user has released the slider
style={'description_width': 'initial'} # allow the long description
)
第3步:定义交互式视图
在这里,您可以将小部件与功能进行匹配。注意,我正在做一个非常简单的选择操作。您在这里不受任何限制。
from IPython.display import display
def show_df(n=n_widget,team=team_widget,position=position_widget):
# Filter – Be sure NOT to overwrite your data
df_filtered = df[(df["Team"].isin(team) & df["Position"].isin(position))].head(n)
display(df_filtered) # this will display your dataframe nicely
第4步:调用交互式功能
本质上,您是在显示小工具。
my_gadget = widgets.interact(show_df)
display(my_gadget)
知道了!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。