gpt4 book ai didi

python - 更新下拉小部件 (ipywidget)

转载 作者:行者123 更新时间:2023-12-04 14:00:10 28 4
gpt4 key购买 nike

我正在使用交互式 ipywidget 下拉菜单来过滤一定数量的数据并用 plotly 绘制图形。

我的问题是下拉小部件的更新:这里是一个简化的例子:

    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 应该启动一个 Action (这里只是一个例子的打印)
  • 当 drop2 的选项列表不同并被 drop1 更改时, drop2.value 会自动设置为新列表的第一个值,即使所选值已存在于前一个列表中。如果它在新列表中仍然可用,是否可以选择保留此值? (例如:选择 drop1 = R, drop2 = 'trois 然后执行 drop1='G' : drop2 自动设置为'2'。选择 drop1 = R, drop2 = 3 然后执行 drop1='B' : drop2 保留在'3')
  • 如果我在 drop2.options 更新后尝试强制 drop2.value,那会使 drop2 = 2 个 Action 进行 2 次更改...我想不出避免它的方法...所以此外,有时我会重复行动,有时我没有行动...

  • 谢谢你的帮助

    最佳答案

    下面的代码应该可以解决您的两个问题:

    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的变化发生,因为字典是从 python 3.7 开始排序的。
  • 修复您的第二个要点,即在更改 Drop1.value 时不要重复调用,这也可能会改变 Drop2.valueDrop2.options ,一个可以忽略的Drop2在函数中 update_drop2最后再观察一次。
  • 关于python - 更新下拉小部件 (ipywidget),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50320535/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com