【问题标题】:ipywidget interactive hiding visibilityipywidget 交互式隐藏可见性
【发布时间】:2017-07-31 14:25:02
【问题描述】:

我想用 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)

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

此外,在检查下拉菜单上的另一个选项后,打印消失,不再返回。

【问题讨论】:

    标签: python text widget visibility dropdown


    【解决方案1】:

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

    boton.layout.visibility = 'hidden'
    

    check.layout.display = 'none'
    

    他们做了一些改变......我从这里得到了 Cannot create a widget whose initial state is visible=False

    【讨论】:

    • 谢谢@pir0,boton.layout.visibility = 'hidden' 为我工作!使用boton.layout.visibility = 'visible' 使其再次可见。
    【解决方案2】:

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

    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)
    

    【讨论】:

    • 有趣...分配完整布局对象与直接更改 visibility 相比有什么优势?
    【解决方案3】:

    给定一个小部件:

    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"
    

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

    # 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 以避免出现巨大的空白。


    有关适用于此处的更多一般 CSS 信息,请参阅What is the difference between visibility:hidden and display:none?

    【讨论】:

      猜你喜欢
      • 2012-05-10
      • 2013-06-01
      • 1970-01-01
      • 2017-10-26
      • 2021-05-28
      • 2015-05-25
      • 1970-01-01
      • 1970-01-01
      • 2017-12-30
      相关资源
      最近更新 更多