我正在使用交互式ipywidget下拉列表来过滤一定数量的数据,并以圆滑的方式绘制图形。
我的问题在于下拉小部件的更新:下面是一个简化的示例:
import ipywidgets as widgets
from ipywidgets import *
from IPython.display import display, clear_output, HTML
def update_drop2(*args):
if Drop1.value=='R':
Drop2.options = {'un':'1','trois':'3','quatre':'4'}
if Drop1.value=='B':
Drop2.options = {'un':'1','trois':'3','quatre':'4'}
if Drop1.value=='G':
Drop2.options = {'deux':'2','quatre':'4','trois':'3'}
def action(*args):
print('action')
Drop1 = widgets.Dropdown(
options = {'red':'R','blue':'B','green':'G'},
value = 'R',
description='Drop1 :',
disabled=False,
continuous_update=False,
style = {'description_width': 'initial'}
)
Drop2 = widgets.Dropdown(
options = {'un':'1','deux':'2','trois':'3'},
value = '3',
description='Drop2 :',
disabled=False,
continuous_update=False,
style = {'description_width': 'initial'}
)
display(Drop1,Drop2)
Drop1.observe(update_drop2,'value')
Drop2.observe(action,'value')drop1更改drop2的选项。drop1的任何更改(以及drop2应该启动一个操作(这里只是一个例子的打印)
谢谢你的帮忙
发布于 2021-07-27 20:08:04
下面的代码应该可以解决这两个问题:
import ipywidgets as widgets
from ipywidgets import *
from IPython.display import display, clear_output, HTML
out = widgets.Output()
def action(*args):
with out:
print('action')
def update_drop2(*args):
temp = Drop2.value
Drop2.unobserve(action, 'value')
if Drop1.value=='R':
Drop2.options = {'un':'1','trois':'3','quatre':'4'}
if Drop1.value=='B':
Drop2.options = {'un':'1','trois':'3','quatre':'4'}
if Drop1.value=='G':
Drop2.options = {'deux':'2','quatre':'4','trois':'3'}
if str(temp) in Drop2.options.values():
Drop2.value = temp
Drop2.observe(action, 'value')
action()
Drop1 = widgets.Dropdown(
options = {'red':'R','blue':'B','green':'G'},
value = 'R',
description='Drop1 :',
disabled=False,
continuous_update=False,
style = {'description_width': 'initial'}
)
Drop2 = widgets.Dropdown(
options = {'un':'1','deux':'2','trois':'3'},
value = '3',
description='Drop2 :',
disabled=False,
continuous_update=False,
style = {'description_width': 'initial'}
)
display(Drop1, Drop2, out)
Drop1.observe(update_drop2,'value')
Drop2.observe(action, 'value')Output小部件来实际显示输出。temp来检查Drop2的值是否包含在Drop2.options字典中,并在需要时相应地更改该值。Drop2.value中的更改发生了,因为字典是从python3.7开始排序的。Drop1.value时不要进行双重调用,这也可能会更改Drop2.value和Drop2.options,您可以在函数update_drop2中取消对Drop2的观察,并在最后再次观察它。https://stackoverflow.com/questions/50320535
复制相似问题