ipywidget 交互式隐藏可见性
ipywidget interactive hiding visibility
我想用ipywidgets做一个互动模块。
到目前为止一切顺利,但我被卡住了。
我想根据特定情况隐藏某个 ipywidget 对象的可见性,并且我希望我打印的文本显示在小部件上方并停留在那里。
dropdown=widgets.Dropdown(
options={'Coffee machine': 1, 'Washing machine': 2, 'Water Heater': 3, 'Heating System': 4, 'Dryer': 5, 'Oven': 6, 'Microwave': 7, 'Other':8},
value=1,
description='Apparaat:',
)
text_new=widgets.Text()
def text_field(value):
if(value==8):
display(text_new)
text_new.on_submit(handle_submit)
else:
text_new.visible(False) #Doesn't work but I want something like this
print("Today you had an increase in electricity consumption, would you like to name this device?") #This just be above the dropdown menu and be stuck
i=widgets.interactive(text_field, value=dropdown)
display(i)
现在的作用:
当在下拉菜单中选中 "Other" 时,会出现一个文本框,用户可以在其中输入内容。
但是,当检查另一台机器时,文本框会保留在那里。
我只需要一个 "hide" 函数,但我似乎找不到一个有用的函数。
此外,在选中下拉列表中的另一个选项后,打印消失了,再也没有回来。
有同样的问题所以我在
boton.layout.visibility = 'hidden'
或
check.layout.display = 'none'
他们做了一些改变...我从这里得到了
Cannot create a widget whose initial state is visible=False
除了接受的答案,如果你想动态改变控件的可见性,你可以声明布局变量并重用。
layout_hidden = widgets.Layout(visibility = 'hidden')
layout_visible = widgets.Layout(visibility = 'visible')
喜欢附加到一个事件:
def visible_txt(b):
text_box.layout = layout_visible
def hidden_txt(b):
text_box.layout = layout_hidden
btn_visible.on_click(visible_txt)
btn_hidden.on_click(hidden_txt)
给定一个小部件:
import ipywidgets
button = ipywidgets.Button()
有两种直接隐藏小部件的方法,两者有显着区别。
隐藏和取消隐藏小部件而不影响整体页面布局:
# Turn the widget "invisible" without affecting layout
button.layout.visibility = "hidden"
# Make the widget visible again, layout unaffected
button.layout.visibility = "visible"
隐藏和取消隐藏小部件并折叠小部件占用的space:
# Hide widget and collapse empty space
button.layout.display = "none"
# Re-add the widget, adjusting page layout as necessary.
button.layout.display = "block"
什么时候使用每一个?根据经验,使用 layout.visibility
这样页面布局就不会随着可见性切换而不断跳动。但是,对于非常大的小部件,请考虑使用 layout.display
以避免巨大的空白 spaces。
有关适用于此处的更一般 CSS 信息,请参阅 What is the difference between visibility:hidden and display:none?
我想用ipywidgets做一个互动模块。 到目前为止一切顺利,但我被卡住了。 我想根据特定情况隐藏某个 ipywidget 对象的可见性,并且我希望我打印的文本显示在小部件上方并停留在那里。
dropdown=widgets.Dropdown(
options={'Coffee machine': 1, 'Washing machine': 2, 'Water Heater': 3, 'Heating System': 4, 'Dryer': 5, 'Oven': 6, 'Microwave': 7, 'Other':8},
value=1,
description='Apparaat:',
)
text_new=widgets.Text()
def text_field(value):
if(value==8):
display(text_new)
text_new.on_submit(handle_submit)
else:
text_new.visible(False) #Doesn't work but I want something like this
print("Today you had an increase in electricity consumption, would you like to name this device?") #This just be above the dropdown menu and be stuck
i=widgets.interactive(text_field, value=dropdown)
display(i)
现在的作用: 当在下拉菜单中选中 "Other" 时,会出现一个文本框,用户可以在其中输入内容。 但是,当检查另一台机器时,文本框会保留在那里。 我只需要一个 "hide" 函数,但我似乎找不到一个有用的函数。
此外,在选中下拉列表中的另一个选项后,打印消失了,再也没有回来。
有同样的问题所以我在
boton.layout.visibility = 'hidden'
或
check.layout.display = 'none'
他们做了一些改变...我从这里得到了 Cannot create a widget whose initial state is visible=False
除了接受的答案,如果你想动态改变控件的可见性,你可以声明布局变量并重用。
layout_hidden = widgets.Layout(visibility = 'hidden')
layout_visible = widgets.Layout(visibility = 'visible')
喜欢附加到一个事件:
def visible_txt(b):
text_box.layout = layout_visible
def hidden_txt(b):
text_box.layout = layout_hidden
btn_visible.on_click(visible_txt)
btn_hidden.on_click(hidden_txt)
给定一个小部件:
import ipywidgets
button = ipywidgets.Button()
有两种直接隐藏小部件的方法,两者有显着区别。
隐藏和取消隐藏小部件而不影响整体页面布局:
# Turn the widget "invisible" without affecting layout
button.layout.visibility = "hidden"
# Make the widget visible again, layout unaffected
button.layout.visibility = "visible"
隐藏和取消隐藏小部件并折叠小部件占用的space:
# Hide widget and collapse empty space
button.layout.display = "none"
# Re-add the widget, adjusting page layout as necessary.
button.layout.display = "block"
什么时候使用每一个?根据经验,使用 layout.visibility
这样页面布局就不会随着可见性切换而不断跳动。但是,对于非常大的小部件,请考虑使用 layout.display
以避免巨大的空白 spaces。
有关适用于此处的更一般 CSS 信息,请参阅 What is the difference between visibility:hidden and display:none?