jupyter-notebook - 使用 ipywidgets 水平显示单选按钮
问题描述
我想使用 ipywidgets 水平显示单选按钮。
radio_input1 = widgets.RadioButtons(options=['Option 1', 'Option 2'])
但它垂直显示单选按钮:
我试图在 HBox 中放置只有一个选项的单选按钮,并向每个单选按钮添加观察者事件,然后从观察者方法中取消选择选定的单选按钮,但在此之前不观察事件然后重新注册观察事件。不知何故,它调用了 3 次:
output_radio_selected = widgets.Text() # Used to take the user input and access it when needed
radio_input1 = widgets.RadioButtons(options=['Option 1', 'Option 2']) # Declare the set of radio buttons and provide options
radio_input2 = widgets.RadioButtons(options=['Option 3', 'Option 4'])
def bind_selected_to_output(sender): # Connect the input from the user to the output so we can access it
#radio_input1.unobserve(bind_selected_to_output)
radio_input1.unobserve_all()
radio_input1.index=0
#print(sender)
global selected_option # Global variable to hold the user input for reuse in your code
output_radio_selected.value = radio_input1.value
selected_option = output_radio_selected.value # Example variable assigned the selected value
print('Selected option set to: ' + selected_option) # For test purposes
radio_input1.observe(bind_selected_to_output)
radio_input1.observe(bind_selected_to_output) # Run the bind... function when the radio button is changed
#radio_input1.observe(bind_selected_to_output, names=['value'])
#radio_input1 # Display the radio buttons to the user
widgets.HBox([radio_input1])
解决方案
我可以通过可能的黑客来做到这一点,我不知道它的正确解决方案,但它可以工作。我拿了 4 个不同的单选按钮和 HBox widgets.HBox([radio1,radio2,radio3,radio4]) 然后在选择一个单选按钮后,我取消选择另一个被选中的单选按钮。我是怎么做的:
import ipywidgets as widgets
import numpy
output_radio_selected = widgets.Text()
radio1 = widgets.RadioButtons(options=['Option 1'])
radio2 = widgets.RadioButtons(options=['Option 2'])
radio3 = widgets.RadioButtons(options=['Option 3'])
radio4 = widgets.RadioButtons(options=['Option 4'])
radio1.index = None
radio2.index = None
radio3.index = None
radio4.index = None
def radio1_observer(sender):
#print(sender)
radio2.unobserve(radio2_observer, names=['value'])
radio2.index = None
radio3.unobserve(radio3_observer, names=['value'])
radio3.index = None
radio4.unobserve(radio4_observer, names=['value'])
radio4.index = None
global selected_option
output_radio_selected.value = radio1.value
selected_option = output_radio_selected.value
print('Selected option set to: ' + selected_option)
radio2.observe(radio2_observer, names=['value'])
radio3.observe(radio3_observer, names=['value'])
radio4.observe(radio4_observer, names=['value'])
def radio2_observer(sender):
radio1.unobserve(radio1_observer, names=['value'])
radio1.index = None
radio3.unobserve(radio3_observer, names=['value'])
radio3.index = None
radio4.unobserve(radio4_observer, names=['value'])
radio4.index = None
global selected_option2
output_radio_selected.value = radio2.value
selected_option2 = output_radio_selected.value
print('Selected option set to: ' + selected_option2)
radio1.observe(radio1_observer, names=['value'])
radio3.observe(radio3_observer, names=['value'])
radio4.observe(radio4_observer, names=['value'])
def radio3_observer(sender):
radio1.unobserve(radio1_observer, names=['value'])
radio1.index = None
radio2.unobserve(radio2_observer, names=['value'])
radio2.index = None
radio4.unobserve(radio4_observer, names=['value'])
radio4.index = None
global selected_option3
output_radio_selected.value = radio3.value
selected_option3 = output_radio_selected.value
print('Selected option set to: ' + selected_option3)
radio1.observe(radio1_observer, names=['value'])
radio2.observe(radio2_observer, names=['value'])
radio4.observe(radio4_observer, names=['value'])
def radio4_observer(sender):
radio1.unobserve(radio1_observer, names=['value'])
radio1.index = None
radio2.unobserve(radio2_observer, names=['value'])
radio2.index = None
radio3.unobserve(radio3_observer, names=['value'])
radio3.index = None
global selected_option4
output_radio_selected.value = radio4.value
selected_option4 = output_radio_selected.value
print('Selected option set to: ' + selected_option4)
radio1.observe(radio1_observer, names=['value'])
radio2.observe(radio2_observer, names=['value'])
radio3.observe(radio3_observer, names=['value'])
radio1.observe(radio1_observer, names=['value'])
radio2.observe(radio2_observer, names=['value'])
radio3.observe(radio3_observer, names=['value'])
radio4.observe(radio4_observer, names=['value'])
widgets.HBox([radio1,radio2,radio3,radio4])
推荐阅读
- javascript - 如何在 React Native 中停止这些并发动画?
- javascript - 如何根据用户时区更改时间戳?
- elasticsearch - 查询子属性
- ruby-on-rails - Rails 6 + Webpacker 4 + PostCSS & @font-face + 本地字体
- perl - 如何重命名目录中的所有文件以具有相同数量的数字?
- sparql - Graphdb sparql 无法进行联合查询
- mysql - 需要将mysql转为SQL
- r - 如何将转换矩阵读入 Cytoscape 以进行马尔可夫链建模?
- reactjs - 我可以为 ReactJS 重新使用相同的 onload.js 函数吗
- android - 无法使用 com.android.test 模块插件运行 android espresso 测试