ipywidgets 更新日志#

这是ipywidgets版本变更的概要。更多详细信息,请参阅GitHub上适当里程碑的问题和拉取请求。

8.0.6#

亮点包括:

  • 修复:恢复移除ipykernel依赖 #3749

  • 修复:structuredClone 破坏了依赖于 JSON/toJSON 的默认序列化器 #3738

  • 修复:comm/ipykernel/manager 运行时问题:#3740, #3737

8.0.5#

亮点包括:

  • 修复:正确类型的Comm接口 #3722

  • 修复:支持通讯包 #3533

  • 修复: 使用 structuredClone 允许直接支持二进制特性 #3689

  • 修复:组合框更新问题 #3681

  • 修复: 添加灰色作为有效颜色 #3671

  • 修复:使用交互时产生的废弃警告 #3669

8.0.4#

亮点包括:

  • 修复:滑块更改事件与轻触问题:#3597, #3617

  • 修复:意外的弃用警告:#3648, #3650

  • 修复:注册状态查询失败,导致无法从前端创建widgets:#3653

8.0.3#


亮点包括:

  • 修复:向后兼容7.x版本,我们重新引入了.widget.widget_types #3567

  • 修复: 向后兼容7.x版本, 在设置状态期间恢复 hold_sync #3642

8.0#

要查看完整的拉取请求和问题列表,请查看GitHub上的8.0里程碑,或者查看自7.x以来的完整变更列表。要获取关于将使用ipywidgets的代码迁移到8.0的建议,请参阅用户迁移指南。如果您编写自定义智能体,请查看自定义智能体迁移指南以获取关于迁移您的智能体以支持ipywidgets 8的建议。

用户#

以下是ipywidgets 8.0版本中用户可见变更的一些亮点。

日期和时间选择器#

除了现有的DatePicker控件外,我们现在还有新的DatetimePicker和TimePicker控件。(#2715)

from ipywidgets import VBox, TimePicker, DatetimePicker
VBox([
  TimePicker(description='Time'),
  DatetimePicker(description='Date/Time')
])

标签输入小部件#

新的TagsInput小部件提供了一种简便的方式来收集和管理小部件中的标签。您可以拖放标签以重新排序,将它们限制在一组允许的值中,甚至防止创建重复标签。(#2591, #3272)

from ipywidgets import TagsInput
TagsInput(
    value=['pizza', 'fries'],
    allowed_tags=['pizza', 'fries', 'tomatoes', 'steak'],
    allow_duplicates=False
)

同样地,新的ColorsInput小部件提供了一种以标签形式选择颜色的方式

from ipywidgets import ColorsInput
ColorsInput(
    value=['red', '#2f6d30'],
    # allowed_tags=['red', 'blue', 'green'],
    # allow_duplicates=False
)

堆叠小部件#

新的 Stack 容器部件仅显示所选子部件,而其他子部件保持隐藏。如果您希望根据其他交互显示不同部件的区域,这将非常有用。

from ipywidgets import Stack, Button, IntSlider, Dropdown, VBox, link
s = Stack([Button(description='Click here'), IntSlider()], selected_index=0)
d = Dropdown(options=['button', 'slider'])
link((d, 'index'), (s, 'selected_index'))
VBox([d, s])

文件上传小部件#

文件上传部件已进行全面改进,以更实用的格式处理多个文件:

  • .value 属性现在是一个字典列表,而不是将上传名称映射到内容的字典。

  • 每个上传文件的内容是.content键中的一个内存视图,例如,uploader.value[0].content

  • .data 属性已被移除。

  • .metadata 属性已被移除。

详情请参阅用户迁移指南了解如何迁移您的代码。

(#2767, #2724, #2666, #2480)

更多样式选项#

许多样式和布局选项已添加到核心小部件中:

  • 现在支持许多核心小部件的工具提示,而不仅仅是几个描述工具提示 (#2680)

    from ipywidgets import Button
    Button(description="Click me", tooltip='An action')
    
  • 边框可以通过布局的border_topborder_rightborder_bottomborder_left属性独立设置样式(#2757#3269

    from ipywidgets import Button
    Button(description="Click me", layout={'border_bottom': '3px solid blue'})
    
  • 默认情况下描述现在为纯文本以确保安全,但您可以通过 description_allow_html 属性设置允许使用 HTML(出于安全考虑,HTML 内容仍会被清理)。(#2785)

    from ipywidgets import Text
    Text(description="<b>Name</b>", description_allow_html=True)
    
  • 许多其他样式属性可以在核心部件上进行设置,例如字体族、大小、样式、粗细、文本颜色和文本装饰。请参阅文档中的表格以获取参考。(#2728)

  • SelectionSlider 现在有一个 handle_color 样式属性 (#3142)

  • 要控制键盘导航,可以设置部件是否可制表(即,Tab 键将遍历到该部件)(#2640

选择容器标题#

Accordion、Tab 和 Stack 小部件现在有一个 .titles 属性,您可以通过构造函数或作为属性获取和设置标题。(#2746, #3296, #3477)

from ipywidgets import Tab, IntSlider, Text
Tab([IntSlider(), Text()], titles=('Slider', 'Text'))

滑块实现#

核心部件中的滑块实现现在使用nouislider。这使我们能够修复长期存在的错误并引入新功能,比如在范围滑块中拖动范围。(#2712, #630, #3216, #2834)

协作#

默认情况下,ipywidgets 8启用了协作模式,其中一个前端的控件更新会反映到其他前端,从而实现多用户之间的一致状态,并修复内核与前端之间的同步。如果这些更新回显消息占用过多带宽或导致交互变慢,您可能希望禁用它们。要跨ipywidgets禁用回显更新消息,请将环境变量JUPYTER_WIDGETS_ECHO设置为0。对于控件作者,若要将自定义控件的特定属性排除在回显更新之外(例如,如果该属性包含大量不需要同步的数据),请使用echo_update=False元数据标记该属性(我们在核心代码中为FileUpload控件的data属性执行此操作)。(#3195, #3343, #3394, #3407

用于HTML管理器的CDN#

我们已经更方便地从内容分发网络加载widgets。

  • 默认CDN从unpkg更改为jsDelivr (#3121, #1627)

  • 您可以使用data-jupyter-widgets-cdn-only属性来仅从CDN加载模块 (#2792, #2786)

  • 我们已经更新了webpack公共路径设置,使得HTMLManager和Jupyter Notebook扩展可以从它们被加载的任何位置拉取资源,而不仅限于CDN。如果您开发自定义组件,我们强烈建议您通过应用https://github.com/jupyter-widgets/widget-cookiecutter/pull/103/files中的更改来对您的组件进行类似的修改。#3464, #3508

其他变更#

以下是 ipywidgets 8.0 版本中的一些其他更改的简短列表。

  • 添加一个基于cookiecutter的教程来构建自定义小部件(#2919

  • 将媒体小部件改为使用内存视图。 (#2723)

  • 在html-manager中升级至FontAwesome 5 (#2713)

  • 播放部件现在会根据需要在播放和暂停按钮之间切换 (#2703, #2671)

  • 放弃支持映射类型作为选择选项(#2679, #1958)

  • 聚焦或失焦一个部件。(#2664, #2692, #2691, #2690)

  • 从 widgetsnbextension 中移除 notebook 依赖 (#2590)

  • 将范围滑块中的‘value’转换为元组 (#2441)

  • 播放小部件:暴露播放和重复功能 (#2283, #1897)

  • 修复防抖动和节流代码(#3060)

  • 修复旋转图标的回归问题 (#2685, #2477)

  • 修复选择容器默认索引 (#1823)

  • 移除已弃用的溢出属性 (#2688)

  • 选择: 如果当前没有选择项且选项列表发生变化,则不强制进行选择 (#3284)

  • 为实验室扩展添加本地化支持 (#3286)

  • 放弃对Python 2.7、3.4和3.5的支持(#2558, #2655, #3131, #3120)

  • 修复组合框选项中的字符转义 (#2972)

  • 如果IPython不可用,修改输出以使用通信(#2954

  • 修复/media类中from_file方法的参数传递问题 (#3074)

  • Widgetsnbextension: 渲染失败时抛出错误 (#3280)

  • 修复Image小部件未释放对象URL导致的内存泄漏问题(#3171, #3170

  • ErrorWidget as fallback when widgets models or views fail - Following up (#3304)

  • 修复交互式绘图中的matplotlib图表 (#3277)

  • 修复选择平等检查 (#2897)

  • 移除on_displayed Python回调机制 (#2021)

开发者#

要查看核心控件模型规范变更的概览,请参阅#3455

Python#

  • Widget.widgetsWidget.widget_types 现在是私有变量 (#3122, #3173)

  • 生成部件数据规范为JSON格式(#2193

  • 使用 _repr_mimebundle_ 并要求 ipython 6.1 或更高版本。(#2021, #1811)

  • set_state 期间保持同步 + 修复选择小部件的不稳定性 (#3271)

  • 移除已弃用的 handle_kernel 别名 (#2694)

  • 移除了register装饰器的已弃用签名 (#2695)

JavaScript#

  • 修复CSS变量名称以匹配JupyterLab名称 (#2801, #2062)

  • 删除 display_modeldisplay_view (#2752, #2751)

  • 放弃使用下划线 (#2742)

  • 升级到 es2017 javascript (#2725)

  • 将基础管理器拆分为独立的包 (#2710, #2561)

  • 将Phosphor更改为Lumino (#2681, #3267)

  • Widgetmanagerbase: 改进 create_view 返回类型 (#2662)

  • 重构JupyterLab小部件管理器以便复用 (#2532)

  • 使更多实验室管理器依赖项变为可选(#2528

  • jp-outputarea-output 节点中移除类 jupyter-widgets (#2500)

  • pWidget 重命名为 luminoWidget 并弃用 pWidget (#3118, #3141, #3358,)

  • 添加 layoutstyleshown 事件 (#3300)

  • 实现jupyter.widget.control通信通道 (#3313)

  • 更新至 TypeScript 4.3 (#3162)

  • 为调整大小事件添加事件监听器 (#3124)

  • 移除 process.cwd 的 polyfill (#3315)

  • 确保 buffer 是一个 DataView (#3127)

  • 弃用过于宽泛的CSS类widget并引入类似的jupyter-widget CSS类 (#3146)

  • 通过控制通信获取完整的小部件状态 (#3021)

  • 导出 LabWidgetManager 和 KernelWidgetManager (#3166)

  • 更实用的语义化版本范围消息 (#3185)

  • 使基础小部件管理器.get_model()方法始终返回一个Promise,如果请求的模型未注册则会被拒绝。要测试模型是否已注册,请使用新的.has_model()方法(#3389

文档改进#

  • 文档全面修订 (#3104, #3096, #3099, #3076, #2824, #3246, #3243, #3103, #3165, #3283, #2927, #3062, #3129, #3130, #3155, )

  • 从微件列表笔记本中移除步骤参数 (#3106)

  • 从文档中移除额外要求以修复RTD构建 (#3098)

  • 将7.x分支的文档要求与主分支对齐(#3094

  • 从README的安装中移除失效的深层链接 (#3225)

  • 修复关于在HTML中嵌入小部件的文档(#3224

  • 修复示例web3中运行过程中缺失的进程 (#3223)

  • 完成interactive的文档字符串。(#3169)

  • 取消固定ipykernel<6用于文档 (#3168)

  • 检查里程碑并生成变更日志(#3125)

  • 将图表示例改为接收元组而不是字典 (#3117)

  • 修复防抖动和节流代码(#3060)

  • 变量检查器示例使用了错误的回调参数签名 (#3302)

仓库维护#

  • 使用Galata进行视觉回归测试 (#3172, #3279)

  • 重新组织单体仓库中的软件包,将python包移动到python文件夹中(#3301, #3316

  • 在问题模板上使用新的自定义小部件标签 (#3176)

  • 在CI失败时创建并上传参考截图 (#3227)

  • 允许 generate-spec 接受可选的输出文件 (#3174)

  • 更新至 Jupyter Packaging 0.10 (#3194)

  • 更新错误报告测试环境 (#3156)

  • 从新议题选项中创建指向gitter和discourse的链接 (#3153)

  • 将JupyterLab的milestone_check脚本适配用于ipywidgets。(#3091)

  • 为 traitlets 5 修复规范生成 (#3234)

  • 添加文档问题模板 (#3095)

  • 添加Binder链接和徽章 (#3164, #3212, #3151, #3148, #2701)

此版本的贡献者#

(此版本的GitHub贡献者页面)

@afonit | @alex-rind | @Alexboiboi | @azjps | @blois | @bollwyvl | @bsyouness | @casperdcl | @crahan | @davidbrochart | @deisi | @dependabot | @elliothershberg | @fperez | @giswqs | @github-actions | @hai-schrodinger | @ianhi | @ibdafna | @jasongrout | @jbpauly | @joequant | @joseph2rs | @jpn– | @jtpio | @keatonb | @kedarisetti | @kefirbandi | @maartenbreddels | @manuvazquez | @marimeireles | @MartinKolarik | @martinRenou | @mbektas | @meeseeksdev | @meeseeksmachine | @mgeier | @MicaelJarniac | @minrk | @MSeal | @mwcraig | @NichtJens | @nmstoker | @partev | @pbugnion | @raziqraif | @rsheftel | @shaperilio | @smeng9 | @snickell | @StefanBrand | @stonebig | @SylvainCorlay | @thomasaarholt | @trungleduc | @vidartf | @willingc | @zerline

7.7.1#

要查看完整的拉取请求列表,请访问 GitHub 上的 7.7.1 milestone

亮点包括:

  • 修复FontAwesome 4和5版本的破损链接图标 #3495

  • 修复消息节流错误 #3494

  • 修复状态消息解析以更宽松 #3486

  • 修复Python 3.11上的测试 #3480

  • 改进首页文档 #3496

    7.7


要查看完整的拉取请求和问题列表,请查看GitHub上的7.7 milestone

亮点包括:

  • 修复 Python 3.10 上的安装问题。 #3368

  • 如果无法渲染部件则抛出错误,使渲染系统能够回退到渲染可用的其他数据类型(若存在)。#3290

  • 创建一个新的控件通信通道,实现更高效地获取内核控件状态。#3201

  • 重构获取内核小部件状态的逻辑到管理器基类中。该逻辑首先尝试使用新的小部件控制通信通道,如果失败则回退到现有的逐个请求每个小部件状态的方法。#3337

  • 启用HTMLManager输出控件以渲染状态更新。#3372

  • 如果JupyterLab CSS变量已定义,则不重置它们。#3344

  • 修复变量检查器示例。#3302

  • 引入新的widget manager has_model 方法,用于同步检查widget模型是否已注册。#3377

  • 解决Chrome渲染组合框箭头中的错误。#3375

  • 可选地将来自前端的更新消息回显到其他前端。这使不同前端中的小部件视图能够同时保持状态一致,并确保来自内核和前端的同步更新解决为一致状态。在ipywidgets 7.7中默认关闭此功能,预计在ipywidgets 8.0中将默认开启。要启用ipywidgets间的回显更新消息,请将环境变量JUPYTER_WIDGETS_ECHO设置为1。要将特定属性从回显更新中排除,请用echo_update=False元数据标记该属性(我们在核心中为FileUpload小部件的data属性执行此操作)。#3400, #3394

7.6#

要查看完整的拉取请求和问题列表,请参阅GitHub上的7.6.0 milestone

此版本的主要变化是安装 ipywidgets 7.6.0 现在将自动启用 JupyterLab 3.0 中的 ipywidgets 支持——用户无需额外的 JupyterLab 安装步骤,无需重新构建 JupyterLab,也不需要安装 Node.js。只需使用 pip (pip install ipywidgets==7.6.0) 或 conda/mamba (conda install -c conda-forge ipywidgets=7.6.0) 安装 python ipywidgets 包,ipywidgets 将自动在经典 Jupyter Notebook 和 JupyterLab 3.0 中工作。

这是通过新的Python包jupyterlab_widgets版本1.0实现的,ipywidgets7.6.0现在依赖它(类似于ipywidgets已经依赖widgetsnbextension包为经典Jupyter Notebook配置ipywidgets一样)。jupyterlab_widgets Python包是一个JupyterLab 3.0预构建扩展,这意味着它可以安装到JupyterLab 3.0中,而无需重新构建JupyterLab,也不需要安装Node.js。

Widget 维护者更新#

自定义小部件维护者需要做出两项更改以更新至 JupyterLab 3:

  1. @jupyter-widgets/base 依赖版本更新至包含 ^4 以在 JupyterLab 3.0 中工作。例如,如果您之前依赖 @jupyter-widgets/base 版本 ^2 || ^3,请更新至 ^2 || ^3 || ^4 以便您的部件能在经典 Jupyter Notebook、JupyterLab 1、JupyterLab 2 和 JupyterLab 3 中工作。详情背景请参阅 #2472

  2. package.json中,在jupyterlab键内添加以下sharedPackages配置。详情请参阅JupyterLab扩展文档

      "jupyterlab": {
        "sharedPackages": {
          "@jupyter-widgets/base": {
            "bundled": false,
            "singleton": true
          }
        }
      }
    

除了这两个步骤以更新至JupyterLab 3外,我们还建议您将小部件的JupyterLab扩展设置为JupyterLab 3.0的预构建扩展。用户将能够在不重新构建JupyterLab或需要Node.js的情况下安装您的JupyterLab 3.0预构建扩展。有关更多详细信息,请参阅JupyterLab 3扩展开发者文档或新的小部件扩展cookiecutter

7.5#

如需查看完整的拉取请求和问题列表,请访问GitHub上的7.5里程碑

变化包括:

  • 新增用于定位交互式微件的 AppLayoutGridLayout 模板。#2333

  • 新增 FileUpload 窗口部件,允许用户从浏览器上传文件。#2258

  • 新增 ComboBox 小部件。#2390

  • JupyterLab的CSS变量现在默认暴露,即使在经典notebook的情况下也是如此。#2418

Widget 维护者更新#

自定义小部件维护者需要更新其@jupyter-widgets/base依赖版本以在JupyterLab 1.0中工作。例如,如果您依赖于@jupyter-widgets/base版本^1.1,请更新到^1.1 || ^2,以便您的小部件在经典notebook、JupyterLab 0.35和JupyterLab 1.0中工作。有关背景信息,请参阅#2472

7.4#

要查看完整的拉取请求和问题列表,请查看GitHub上的7.4里程碑

变化包括:

  • 引入了新的VideoAudio部件。#2162 我们将@jupyter-widgets/controls部件规范版本更新至1.4.0,导致版本号提升至7.4。

  • 选择小部件的options属性的映射使用已被废弃。#2130

# 译文如下: ## 7.3# (注:源语言已经是中文,无需进行翻译,直接输出原文)

要查看完整的拉取请求和问题列表,请查看 GitHub 上的7.3 milestone

变化包括:

  • 引入了一个新的GridBox控件,并在布局中添加了相关的CSS网格属性。这允许使用CSS网格规范来布置控件。有关一些示例,请参阅控件样式文档。由于此及其他模型规范变更,基础包和控制包中的控件视图和模块版本均进行了升级。(#2107, #2064, #1942)

  • 带有 description 属性的小部件现在也有一个 description_tooltip 属性,用于在描述上设置工具提示。工具提示默认为描述文本。将 description_tooltip 设置为 '' 会移除它,将其设置为 None 则使工具提示默认为描述文本。(#2070)

  • 'transparent' 现在是颜色属性的有效值。(#2128

  • 下拉菜单现在有额外的内边距,以便为下拉箭头腾出空间。(#2052, #2101)

  • 图像小部件 repr 现在会截断图像值,以防止在笔记本中产生大量输出。(#2111)

  • 停止支持 Python 3.3。Python 3.3 的支持已于 2017年9月在 Python 社区中停止。(#2129)

  • 许可证信息已整合到 LICENSE 文件中,COPYING.md 文件已被移除。如果您正在重新打包 ipywidgets 或 widgetsnbextension,请确保包含 LICENSE 文件而不是 COPYING.md。(#2133, #2048, #1701, #1706

7.2#

要查看完整的拉取请求和问题列表,请参见GitHub上的7.2 milestone

用户可见的变更包括:

  • 新的 FloatLogSlider 小部件是一个对数刻度滑块,适用于探索广泛的数量级范围。(#1928, #2014)

    from ipywidgets import FloatLogSlider
    FloatLogSlider()
    
  • linkdlink 现在为了方便从 ipywidgets 中导出,这样您可以直接从 ipywidgets 导入它们,而不需要从 traitlets 导入。(#1923

  • interact_manual() 新增了一个选项 manual_name,用于更改更新按钮的名称,例如 interact_manual(manual_name='Update')。(#1924)

  • Output 部件现在有一个 .capture() 方法,它返回一个装饰器以捕获函数的输出。

    from ipywidgets import Output
    out = Output()
    
    @out.capture()
    def f():
      print('This output is captured')
    

    .capture() 方法有一个 clear_output 布尔参数,用于每次运行函数时自动清除输出,以及一个与 clear_output 等待参数相对应的 wait 参数。(#1934

  • 输出部件在其自己的章节中有更全面的文档。(#2020)

  • 现在安装widgetsnbextension会自动在Jupyter Notebook 5.3或更高版本中启用nbextension。(#1911)

  • 如果未安装小部件,小部件的默认渲染现在是文本形式的小部件简短描述,而非更长的HTML消息。(#2007

开发者的变化包括:

  • JavaScript 基础小部件管理器类现在有一个 resolveUrl 方法,用于解析相对于当前笔记本位置的 URL。(#1993

  • html管理器现在提供了一种方法来指定获取哪个JavaScript文件用于一个包以及用于获取库的加载器。(#1995, #1998)

  • @jupyter-widgets/controls widget规范版本已升级为1.2.0。变更内容包括FloatLogSlider小部件及关于数组元素类型的更具体文档。(#2017)

7.1#

要查看完整的拉取请求和问题列表,请查看 GitHub 上的 7.1 milestone

我们更新了@jupyter-widgets/controls小部件规范版本至1.1.0,从而将版本号提升至7.1。新的小部件模型规范现在包含了ToggleButtonsStyle小部件的新属性description_widthfont_weight。此版本还包含其他错误修复。

7.0.x 补丁版本#

请查看GitHub里程碑中的7.0.17.0.27.0.37.0.47.0.5版本,了解这些版本中的错误修复情况。

7.0#

要查看完整的拉取请求和问题列表,请参阅 GitHub 上的 7.0 里程碑

ipywidgets 7.0 版本中主要用户可见的变更包括:

  • 部件现在在经典笔记本的输出区域中显示,并被视为任何其他输出。这使得部件能更自然地与其他单元格输出协同工作。要删除部件,请清除单元格中的输出。由部件视图触发的函数输出会附加到包含部件视图的输出区域。这意味着打印的文本将被附加到输出中,并且调用clear_output()将删除整个输出,包括部件视图。(#1274, #1353)

  • 移除了版本验证检查,因为它引发了过多关于未安装小部件JavaScript或版本号错误的误报警。现在由用户自行确保ipywidgets和widgetsnbextension包的兼容性。(#1219)

  • 文档主题已更改为新的标准Jupyter主题。(#1363)

  • 为了方便,可以使用字典设置layoutstyle属性,这将自动转换为Layout或Style对象,例如IntSlider(layout={'width': '100%'}, style={'handle_color': 'lightgreen'})。(#1253)

  • Select 小部件现已恢复为列表框而非下拉菜单,回归到6.0版本之前的行为。(#1238)

  • Select和SelectMultiple部件现在具有一个rows属性,用于指定显示的行数,与Textarea部件保持一致。layout.height属性会覆盖此设置以控制部件的高度。(#1250

  • 选择控件 (Select, Dropdown, ToggleButtons, 等) 新增了 .value, .label, 和 .index 特性,以便更轻松地访问或更改所选选项。(#1262, #1513)

  • 选择容器小部件(Accordion, Tabs)可以将其.selected_index设为None以取消所有项目的选择。(#1495

  • Play 小部件的范围现在变为包含式(最大值就是最大值,而非最大值减一),以与滑块保持一致

  • 现在 Play 小部件具有一个可选的重复切换按钮(默认可见)。(#1190)

  • 对文本、滑块、滑块范围和进度小部件的重构导致进度小部件失去了其step属性(之前被忽略),并且其中一些小部件的_model_name和/或_view_name属性发生了改变(#1290

  • Checkbox 的描述现在位于复选框右侧且可点击。Checkbox 小部件新增了 indent 属性(默认为 True),以便与带有描述的控件对齐。若要使复选框左对齐,请将 indent 设置为 False。(#1346)

  • 一个新的密码小部件,其行为与文本小部件完全相同,但隐藏输入的文本:Password()#1310

  • 一个新的SelectionRangeSlider小部件,用于从有序对象列表中选择范围。例如,这可以实现一个滑块来选择日期范围。(#1356)

  • Label 小部件现在没有宽度限制。(#1269)

  • 描述宽度现在可以通过 .style.description_width 属性来配置 (#1376)

  • ToggleButtons 新增了一个 .style.button_width 属性,用于设置按钮的 CSS 宽度。将其设置为 'initial' 可使按钮根据内容宽度自动调整大小。(#1257)

  • number sliders 的 readout_format 属性现在会验证其参数. (#1550)

  • IntRangeSlider 小部件现在有一个 .readout_format 特性,用于控制显示格式的格式化。(#1446

  • TextTextareaIntTextBoundedIntTextFloatTextBoundedFloatText 小组件都获得了一个 continuous_update 属性(对于 TextTextArea 默认为 True,其他默认为 False)。(#1545)

  • IntText, BoundedIntText, FloatTextBoundedFloatText部件现在以HTML数字输入形式呈现,并具有控制分辨率的step属性。(#1545)

  • Text.on_submit 回调已弃用;请将 continuous_update 设置为 False 并观察 value 属性:mywidget.observe(callback, 'value')Textarea.scroll_to_bottom 方法已移除。(#1545

  • 部件上的 msg_throttle 属性现已移除,代码中内置了等同于 msg_throttle=1 的消息节流机制。(#1557

  • 使用函数注解来为函数指定交互控件现已被弃用,并将在未来版本的ipywidgets中移除。(#1292)

  • 现在有两种简单的将小部件嵌入HTML页面的方式:一种是使用不依赖require.js且仅支持基础小部件的简单脚本标签,另一种是支持自定义小部件的require模块。详见迁移指南获取更多详情。 (#1615, #1629, #1630)

如果您正在开发自定义小部件或小部件管理器,以下是一些可能影响您的主要变更。迁移指南还详细介绍了如何升级自定义小部件。

  • 在Python/内核端:

    • Python的@register装饰器对于窗口小部件类不再接受字符串参数,而是使用类中的_model_*_view_*特征来注册窗口小部件类。使用@register('name')作为装饰器已弃用,应更改为仅@register#1228, #1276

    • 小部件现在需要正确定义的 _model_module_view_module Unicode 特性。

    • 选择小部件现在同步所选项目的索引,而非标签。(#1262

    • Python的ipywidget.domwidget.LabeledWidget现在更名为ipywidget.widget_description.DescriptionWidget,并且新增了一个ipywidget.widget_description.DescriptionStyle,让用户能够设置描述的CSS宽度。

    • 自定义序列化器现在可以返回一个包含二进制对象的结构(memoryviewbytearray或Python 3的bytes对象)。在这种情况下,同步信息将是一个二进制消息,对于二进制数据来说比base64编码更高效。Image小部件现在使用这种二进制同步。(#1194#1595#1643

  • 在 JavaScript 端:

    • jupyter-js-widgets Javascript包已被拆分为@jupyter-widgets/base包(包含基础小部件类、DOM小部件以及相关的布局和样式类)和@jupyter-widgets/controls包(包含其余的Jupyter小部件控件)。自定义小部件的作者需要更新以依赖@jupyter-widgets/base而不是jupyter-js-widgets(如果您使用了控件包中的类,您还需要依赖@jupyter-widgets/controls)。请参阅cookie cutter以使用新包生成一个简单的自定义小部件示例。

    • Javascript中的自定义序列化器现在为同步模式,并应返回小部件状态的快照。默认序列化器会对可JSON化的对象进行拷贝。(#1270)

    • 自定义序列化器现在可以返回包含二进制对象(ArrayBufferDataView,或类型化数组如Int8ArrayFloat64Array等)的结构。在这种情况下,同步消息将是一个二进制消息,这对于二进制数据相比base64编码效率更高。图像控件现在使用这种二进制同步。(#1194#1643

    • 自定义序列化器的第二个参数是小组件实例,而自定义反序列化器的第二个参数是小组件管理器。

    • Javascript 模型 .id 属性已被重命名为 .model_id,以避免与 Backbone .id 属性冲突。(#1410)

  • 关于小部件管理器与同步消息协议:

    • 部件协议经过了重大修改。新部件消息传递协议(版本2)在版本2协议文档中进行了说明。

    • 现在,小部件使用 display_data 消息显示,而不是使用自定义通信消息。请参阅 ipywidgets 实现作为示例。(#1274

    • 自定义widget管理器现在完全负责加载widget模型和视图类。Widget管理器应根据其环境提供适当的输出模型和视图类,以便Output widget正常工作。(#1313

    • 小部件管理器的clear_state方法不再具有commlessOnly参数。当调用clear_state时,小部件管理器中的所有模型将被关闭并清除。(#1354)

6.0#

ipywidgets 6.0 中主要用户可见的变更包括:

  • 在各种Web上下文中渲染Jupyter交互式小部件

    sphinx文档:http://ipywidgets.readthedocs.io/en/latest/examples/Widget%20List.html nbviewer:http://nbviewer.jupyter.org/github/jupyter-widgets/ipywidgets/blob/main/docs/source/examples/Widget%20List.ipynb 静态网页:http://jupyter.org/widgets

  • 在核心控件集合中添加了日期选择器控件。

  • 对@interact中自动控制生成语法的更改,灵感来自Sage交互语法。

  • 移除在5.0版本中已被弃用的API,包括DOMWidgets属性中的顶层样式以及@interact行为中的一些特殊情况。

  • 提供了一个新的 API 用于小部件的自定义样式,通过一个顶层的 style 属性。例如,滑块手柄的颜色可以通过 slider.style.handle_color 来设置。

  • 移除代理(Proxy)和占位代理(PlaceProxy)部件。

  • 移除已弃用的 FlexBox 部件。请改用 BoxHBoxVBox 部件。可以使用 layout 属性设置各种伸缩属性。

  • 移除已弃用的 Latex 部件。请改用新的 HTMLMath 部件,并在其中使用 $$$ 分隔符包含 LaTeX 数学公式。

  • 移除弃用的小部件布局属性,例如.width.height等。请改用带有Layout小部件的layout属性来管理各种布局属性。

  • Label 组件现在具有与各种组件上的标签保持一致的样式。要使用包含数学公式的自由格式文本,请使用新的 HTMLMath 组件。

  • 移除Dropdown小部件的button_style属性

  • 添加一个OutputWidget用于捕获输出和富显示对象。@interact 已改为使用OutputWidget来处理函数输出,而非覆盖单元格的输出区域。

  • jupyter-js-widgets的Javascript实现现在依赖PhosphorJS框架来管理丰富的布局以及更好地集成JupyterLab。

  • 大量错误修复。

自定义小部件作者须知:

ipywidgets 6.0 在 JavaScript 侧处理默认值方面破坏了向后兼容性。现在,核心组件模型的默认值通过一个返回字典的 default() 方法指定,而不是一个 default 字典属性。如果您希望您的库向后兼容 ipywidgets 5.x,可以像这样使用 _.result

...
defaults: function() {
        return _.extend(_.result(this, 'widgets.DOMWidgetModel.prototype.defaults'), {
          ....
        })
},
...

当在经典笔记本中使用自定义部件时,这不会产生影响,但在Web环境中部署交互式部件时却非常重要。

5.x#

4.1.x#

4.1.1#

4.1.0#

4.0.x#

4.0.3#

版本更新,修复了各种错误。

4.0.2#

添加README.rst文档。

4.0.1#

移除ipynb检查点。

4.0.0#

作为独立软件包的 ipywidgets 首次发布。