lau*_*rie 6 python widget python-3.x jupyter ipywidgets
我使用单选按钮和滑块在 Jupyter 笔记本的单元格中有一些代码。我有一个方法,我只想在更改选择时调用它(在单选按钮的情况下);并且仅当滑块被释放时(在滑块的情况下)。
但是,当单选按钮仅更改一次(我相信它会触发 3 次)时,使用 'observe' 方法会触发多次。并且在发生鼠标按下和鼠标抬起时会触发滑块观察方法。
可以更改它以便只调用一次还是我需要使用观察以外的其他东西?
[编辑] 这是使用单选按钮以及选择一次选项时打印的输出的更新示例:
import ipywidgets as widgets
def radio_called(sender):
print('radio_called')
print(sender)
radio = widgets.RadioButtons(options=['option 1', 'option2', 'option3'])
radio.observe(radio_called)
display(radio)
Run Code Online (Sandbox Code Playgroud)
单击一次选项时的打印输出:radio_ called
{'name': '_property_lock', 'old': traitlets.Undefined, 'new': {'index': 1}, 'owner': RadioButtons(options=('option 1', 'option2', 'option3'), value='option 1'), 'type': 'change'}
radio_called
{'name': 'label', 'old': 'option 1', 'new': 'option2', 'owner': RadioButtons(index=1, options=('option 1', 'option2', 'option3'), value='option 1'), 'type': 'change'}
radio_called
{'name': 'value', 'old': 'option 1', 'new': 'option2', 'owner': RadioButtons(index=1, options=('option 1', 'option2', 'option3'), value='option2'), 'type': 'change'}
radio_called
{'name': 'index', 'old': 0, 'new': 1, 'owner': RadioButtons(index=1, options=('option 1', 'option2', 'option3'), value='option2'), 'type': 'change'}
radio_called
{'name': '_property_lock', 'old': {'index': 1}, 'new': {}, 'owner': RadioButtons(index=1, options=('option 1', 'option2', 'option3'), value='option2'), 'type': 'change'}
Run Code Online (Sandbox Code Playgroud)
如果打印sender对象,您可以看到传递给函数的内容。每个实例都有不同的特征变化(单击时发生的不仅仅是一个动作),请尝试下面的代码。
如果您想过滤为仅发生一次,请在您的observe通话中指定您想要的名称。例如
radio_input.observe(bind_selected_to_output, names=['value'])
import ipywidgets as widgets # If not already imported
output_radio_selected = widgets.Text() # Used to take the user input and access it when needed
radio_input = widgets.RadioButtons(options=['Option 1', 'Option 2']) # Declare the set of radio buttons and provide options
def bind_selected_to_output(sender): # Connect the input from the user to the output so we can access it
print(sender)
global selected_option # Global variable to hold the user input for reuse in your code
output_radio_selected.value = radio_input.value
selected_option = output_radio_selected.value # Example variable assigned the selected value
print('Selected option set to: ' + selected_option) # For test purposes
radio_input.observe(bind_selected_to_output, names=['value']) # Run the bind... function when the radio button is changed
radio_input # Display the radio buttons to the user
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参见此处:https : //ipywidgets.readthedocs.io/en/latest/examples/Widget%20Events.html#Traitlet-events