ipywidget交互式隐藏可见性

aze*_*q6d 4 python text visibility widget dropdown

我想用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)
Run Code Online (Sandbox Code Playgroud)

现在的作用:在下拉菜单中选中“其他”时,将出现一个文本框,用户可以在其中键入内容。但是,当检查另一台计算机时,该文本框将停留在该位置。我只需要一个“隐藏”功能,但似乎找不到一个有效的功能。

同样,在下拉菜单中检查另一个选项后,打印消失,不再回来。

p1r*_*1r0 12

有同样的问题,所以我发现

boton.layout.visibility = 'hidden'
Run Code Online (Sandbox Code Playgroud)

要么

check.layout.display = 'none'
Run Code Online (Sandbox Code Playgroud)

他们进行了一些更改...我从这里得到,如果 无法创建其初始状态为visible = False的小部件

  • 谢谢@ pir0,`boton.layout.visibility ='hidden'`为我工作!使用`boton.layout.visibility ='visible'`使它再次可见。 (2认同)

小智 12

给定一个小部件:

import ipywidgets
button = ipywidgets.Button()
Run Code Online (Sandbox Code Playgroud)

有两种直接的方法可以隐藏小部件,但有显着的区别。

隐藏和取消隐藏小部件而不影响整体页面布局

# Turn the widget "invisible" without affecting layout
button.layout.visibility = "hidden"

# Make the widget visible again, layout unaffected
button.layout.visibility = "visible"
Run Code Online (Sandbox Code Playgroud)

隐藏和取消隐藏小部件并折叠小部件占用的空间

# Hide widget and collapse empty space
button.layout.display = "none"

# Re-add the widget, adjusting page layout as necessary.
button.layout.display = "block"
Run Code Online (Sandbox Code Playgroud)

何时使用每一项?根据经验,使用layout.visibility时页面布局不会在可见性切换时不断跳跃。但是,对于非常大的小部件,请考虑使用layout.display以避免巨大的空白。


有关适用于此处的更一般 CSS 信息,请参阅visibility:hidden 和 display:none 之间有什么区别?


Duc*_*lan 5

除了接受的答案之外,如果您想动态更改控件的可见性,您可以声明布局变量并重用。

layout_hidden  = widgets.Layout(visibility = 'hidden')
layout_visible = widgets.Layout(visibility = 'visible')
Run Code Online (Sandbox Code Playgroud)

就像附加到一个事件:

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)
Run Code Online (Sandbox Code Playgroud)