简单的小部件

参考:examples/Widget Basics.ipynb

Widgets

小部件是在浏览器中有一种表现形式的事件型 Python 对象,通常作为滑动条、文本框等控件。

小部件可以用来做什么?

可以使用小部件为笔记本构建交互式 GUI。还可以使用小部件在 Python 和 JavaScript 之间同步有状态和无状态信息。

使用小部件

要使用小部件框架,您需要导入 ipywidgets

import ipywidgets as widgets

repr

小部件有自己的显示 repr,允许使用 IPython 的显示框架来显示它们。构造并返回 IntSlider 会自动显示小部件。小部件显示在代码单元格下面的输出区域内。清除单元格输出也将删除小部件。

widgets.IntSlider()

display()

还可以使用 display(…) 显式地显示小部件。

from IPython.display import display
w = widgets.IntSlider()
display(w)

多个 display() 调用

如果显示同一个小部件两次,则前端显示的实例将保持彼此同步。试着拖动下面的滑块,观察上面的滑块。

display(w)

关闭小部件

可以通过调用小部件的 close() 方法来关闭它。

w1 = widgets.IntSlider()
display(w1)
w1.close()
w1
IntSlider(value=0)

为什么同一个小部件可以显示两次?

小部件在后端由单个对象表示。每当显示一个小部件时,同一对象的新表示就会在前端创建。这些表示称为视图。

Kernel & front-end diagram

小部件属性

所有的 IPython 小部件共享类似的命名方案。要读取小部件的值,可以查询它的 value 属性。

w = widgets.IntSlider()
display(w)
w.value
0

类似地,要设置小部件的值,可以设置其 value 属性。

w.value = 100
w

Keys

除了 value 之外,大多数小部件共享 keysdescriptiondisabled。要查看任何特定小部件的同步、有状态属性的整个列表,可以查询 keys 属性。

w.keys
['_dom_classes',
 '_model_module',
 '_model_module_version',
 '_model_name',
 '_view_count',
 '_view_module',
 '_view_module_version',
 '_view_name',
 'continuous_update',
 'description',
 'description_tooltip',
 'disabled',
 'layout',
 'max',
 'min',
 'orientation',
 'readout',
 'readout_format',
 'step',
 'style',
 'value']

设置小部件属性初始值的简写

在创建小部件时,可以通过在小部件的构造函数中将它们定义为关键字参数来设置该小部件的一些或所有初始值。

widgets.Text(value='Hello World!', disabled=True)

链接两个类似的小部件

如果需要以两种不同的方式显示相同的值,则必须使用两种不同的小部件。您可以使用 linkjslink 函数将两个属性链接在一起(它们之间的区别将在 Widget Events 中讨论),而不是尝试手动同步两个小部件的值。

a = widgets.FloatText()
b = widgets.FloatSlider()
display(a,b)

mylink = widgets.jslink((a, 'value'), (b, 'value'))

解除小部件的链接

解除小部件的链接很简单。你所要做的就是在链接对象上调用 .unlink。在解除链接之后,尝试更改上面的一个小部件,看看它们是否可以独立更改。

# mylink.unlink()