python - 如何对 ipywidgets 交互式小部件( slider )中的键名进行排序?

标签 python jupyter-notebook ipywidgets

我正在尝试在 jupyter 笔记本上使用 ipywidgets 制作交互式 slider ,以在用户更改 slider 小部件时更改绘图的数据,这很简单,我们可以轻松找到示例代码。我遇到的问题是双重的:1)当我的函数中有很多参数(=变量, slider )要显示时, slider 是垂直排列的,因此如果不滚动 jupyter 页面就很难控制它们。有没有办法按照我的意愿排列 slider ,比如 m × n 网格? 2) 为了传递大量整数/浮点值 slider ,我制作了一个字典以传递给交互函数。在这里,键(= slider /变量/参数)名称似乎以随机顺序显示。我试图在预先按键名排序后传递字典,但它仍然没有解决问题。

如果您能分享任何想法,我将不胜感激。

def myfun(**var_dict):
    v = [value for value in var_dict.values()]
    return np.sum(v)

var_dict = {'var1':1,'var2':2,'var3':3,'var4':4}
w = interactive(myfun,**var_dict)
display(w)

ipywidgets interactive sliders

最佳答案

您将无法使用 **kwargs 解决此问题。如 PEP468 中所述 “它们 [关键字参数] 不起作用的唯一原因是解释器丢弃了该排序信息。” “从 3.5 版开始,Python 将保留传递给函数的关键字参数的顺序”

所以如果你想获得这种行为,你应该: 使用“交互式”时命名您的论点:

from ipywidgets import interactive
from IPython.display import display
import numpy as np
def myfun(**kwargs):
    return np.sum(list(kwargs.itervalues()))
w=interactive(myfun,var1=1,var2=2,var3=3,var4=4)
display(w)

或者,如果您真的想使用字典,据我所知,最好是自己构建小部件,而不使用“交互式”。 你可以这样做:

from IPython.display import display,clear_output
from ipywidgets import widgets
from collections import OrderedDict
var_dict = OrderedDict([('var1',1),('var2',2),('var3',3),('var4',4)])

def myfct(change,list_widgets):
    clear_output()
    print np.sum([widget.value for widget in list_widgets])

list_widgets=[]

# create the widgets
for name,value in var_dict.iteritems():
    list_widgets.append(widgets.IntSlider(value=value,min=value-2,max=value+2,description=name))

# link the widgets with the function
for widget in list_widgets:
    widget.observe(lambda change:myfct(change,list_widgets),names='value',type='change')

# group the widgets into a FlexBox
w = widgets.VBox(children=list_widgets)

# display the widgets
display(w)

享受 :-)

关于python - 如何对 ipywidgets 交互式小部件( slider )中的键名进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37622023/

相关文章:

Python 3 中的 Python 挑战级别 17

python - 图形界面开发包

python - 如何使用seaborn和ipywidgets制作交互式条形图

javascript - 是否真的可以将数据(回调)从 mpld3 传递到 ipython?

python - 如何使用 Python 将目录从包递归复制到当前路径

python - 在两个线程之间传递值

python-3.x - 在 jupyter notebook 中打开 .csv 文件时出现 dtype 错误

python - 有没有办法在 macOS Big Sur 上使用 SageMath?

python - jupyter 笔记本 : show seaborn plot again

python - 使用小部件后端时如何删除 matplotlib 图形的窗口标题