ipywidgets 下拉点击
ipywidgets dropdown onclick
下拉小部件似乎没有 on_click
选项,我想知道是否有某种解决方法。我想到的一种方法是,每次选择一个选项时,刷新选项并再次从顶部开始下拉菜单,其中顶部选项将为空 ""
.
例如假设我有:
from IPython.html import widgets
from IPython.display import display
def dropdown_event_handler(change):
print(change.new)
# flush the options and start from "" again
options = ["", "A", "B"]
dropdown = widgets.Dropdown(options=options, description="Categories")
dropdown.observe(dropdown_event_handler, names="value")
display(dropdown)
所以期望的行为是,如果我再次按下“A”和“A”,A 将被打印两次。
正如您已经建议的那样,您可以在每次更改后将小部件的值设置为 ""
:
from IPython.html import widgets
from IPython.display import display
def dropdown_event_handler(change):
print(change.new)
dropdown.value = ""
options = ["", "A", "B"]
dropdown = widgets.Dropdown(options=options, description="Categories")
dropdown.observe(dropdown_event_handler, names='value')
display(dropdown)
恐怕这是您唯一的选择。 Dropdown
小部件除了“更改”之外没有其他类型。您可以通过使用 type=All
.
打印它们来查看所有可用类型
from IPython.html import widgets
from IPython.display import display
from traitlets import All
def dropdown_event_handler(change):
print(change)
options = ["", "A", "B"]
dropdown = widgets.Dropdown(options=options, description="Categories")
dropdown.observe(dropdown_event_handler, type=All)
display(dropdown)
输出:
{'name': '_property_lock', 'old': traitlets.Undefined, 'new': {'index': 1}, 'owner': Dropdown(description='Categories', options=('', 'A', 'B'), value=''), 'type': 'change'}
{'name': 'label', 'old': '', 'new': 'A', 'owner': Dropdown(description='Categories', index=1, options=('', 'A', 'B'), value=''), 'type': 'change'}
{'name': 'value', 'old': '', 'new': 'A', 'owner': Dropdown(description='Categories', index=1, options=('', 'A', 'B'), value='A'), 'type': 'change'}
{'name': 'index', 'old': 0, 'new': 1, 'owner': Dropdown(description='Categories', index=1, options=('', 'A', 'B'), value='A'), 'type': 'change'}
{'name': '_property_lock', 'old': {'index': 1}, 'new': {}, 'owner': Dropdown(description='Categories', index=1, options=('', 'A', 'B'), value='A'), 'type': 'change'}
因此,如果 Dropdown
小部件中的值没有发生变化,您将无法观察到它。有关详细信息,请参阅 Traitlets documentation.
下拉小部件似乎没有 on_click
选项,我想知道是否有某种解决方法。我想到的一种方法是,每次选择一个选项时,刷新选项并再次从顶部开始下拉菜单,其中顶部选项将为空 ""
.
例如假设我有:
from IPython.html import widgets
from IPython.display import display
def dropdown_event_handler(change):
print(change.new)
# flush the options and start from "" again
options = ["", "A", "B"]
dropdown = widgets.Dropdown(options=options, description="Categories")
dropdown.observe(dropdown_event_handler, names="value")
display(dropdown)
所以期望的行为是,如果我再次按下“A”和“A”,A 将被打印两次。
正如您已经建议的那样,您可以在每次更改后将小部件的值设置为 ""
:
from IPython.html import widgets
from IPython.display import display
def dropdown_event_handler(change):
print(change.new)
dropdown.value = ""
options = ["", "A", "B"]
dropdown = widgets.Dropdown(options=options, description="Categories")
dropdown.observe(dropdown_event_handler, names='value')
display(dropdown)
恐怕这是您唯一的选择。 Dropdown
小部件除了“更改”之外没有其他类型。您可以通过使用 type=All
.
from IPython.html import widgets
from IPython.display import display
from traitlets import All
def dropdown_event_handler(change):
print(change)
options = ["", "A", "B"]
dropdown = widgets.Dropdown(options=options, description="Categories")
dropdown.observe(dropdown_event_handler, type=All)
display(dropdown)
输出:
{'name': '_property_lock', 'old': traitlets.Undefined, 'new': {'index': 1}, 'owner': Dropdown(description='Categories', options=('', 'A', 'B'), value=''), 'type': 'change'}
{'name': 'label', 'old': '', 'new': 'A', 'owner': Dropdown(description='Categories', index=1, options=('', 'A', 'B'), value=''), 'type': 'change'}
{'name': 'value', 'old': '', 'new': 'A', 'owner': Dropdown(description='Categories', index=1, options=('', 'A', 'B'), value='A'), 'type': 'change'}
{'name': 'index', 'old': 0, 'new': 1, 'owner': Dropdown(description='Categories', index=1, options=('', 'A', 'B'), value='A'), 'type': 'change'}
{'name': '_property_lock', 'old': {'index': 1}, 'new': {}, 'owner': Dropdown(description='Categories', index=1, options=('', 'A', 'B'), value='A'), 'type': 'change'}
因此,如果 Dropdown
小部件中的值没有发生变化,您将无法观察到它。有关详细信息,请参阅 Traitlets documentation.