You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从ipwidgets Text组件提取文本?代码无法运行求助

问题

官方文档太繁琐,我需要一个简单的Hello World示例来从文本框提取文本。我写了两段Python代码:一段用observe监听Text组件的value变化,另一段通过按钮点击事件获取文本,但两段代码都没法打印或显示结果。已知on_submit方法已弃用,请问我哪里错了?

代码示例1:监听文本框值变化

from ipywidgets import interact, widgets
from IPython.display import display

dossier_number_widget = widgets.Text(
    value='EP23210283',
    placeholder='EP23210283',
    description='Dossier Number:',
    disabled=False,
    continuous_update=True
)
display(dossier_number_widget)

def callback(wdgt):
    print(wdgt) # 没有打印输出
    display(wdgt) # 没有显示内容
    print(wdgt.value) # 没有打印输出
    display(wdgt.value) # 没有显示内容

dossier_number_widget.observe(callback, 'value')

代码示例2:按钮点击获取文本

from ipywidgets import interact, widgets
from IPython.display import display

submit_button=widgets.Button(description='Submit',button_style='success')
dossier_number_widget = widgets.Text(
    value='EP23210283',
    placeholder='EP23210283',
    description='Dossier Number:',
    disabled=False,
    continuous_update=False
)

def on_button_clicked(wdgt):
    print(dossier_number_widget.value) # 没有打印输出
    display(dossier_number_widget.value) # 没有显示内容

submit_button.on_click(on_button_clicked)

display(dossier_number_widget, submit_button)

解决方法

代码示例1的问题与修正

observe的回调函数接收的参数不是组件本身,而是一个变化字典(包含new、old、type、owner等键)。你直接把这个字典当成组件调用value属性,自然拿不到正确值。

修正后的代码:

from ipywidgets import widgets
from IPython.display import display

dossier_number_widget = widgets.Text(
    value='EP23210283',
    placeholder='EP23210283',
    description='Dossier Number:',
    disabled=False,
    continuous_update=True
)
display(dossier_number_widget)

def callback(change):
    # 从变化字典里获取新值
    print("新值:", change['new'])
    display("显示新值:", change['new'])
    # 也可以通过owner拿到组件本身,再取value
    print("组件当前值:", change['owner'].value)

dossier_number_widget.observe(callback, 'value')

代码示例2的问题与修正

这段代码逻辑本身没问题,无法输出的常见原因是Jupyter环境的扩展未启用,或是你在普通Python脚本而非Jupyter Notebook/Lab中运行。

如果是Jupyter环境,先检查并启用ipywidgets扩展:

  • 针对Jupyter Notebook:
jupyter nbextension enable --py widgetsnbextension
  • 针对Jupyter Lab:
jupyter labextension install @jupyter-widgets/jupyterlab-manager

修正后的代码(逻辑不变,确保环境正确):

from ipywidgets import widgets
from IPython.display import display

submit_button = widgets.Button(description='Submit', button_style='success')
dossier_number_widget = widgets.Text(
    value='EP23210283',
    placeholder='EP23210283',
    description='Dossier Number:',
    disabled=False,
    continuous_update=False
)

def on_button_clicked(wdgt):
    current_value = dossier_number_widget.value
    print("提交的文本:", current_value)
    display("提交的文本:", current_value)

submit_button.on_click(on_button_clicked)

display(dossier_number_widget, submit_button)

额外注意事项

  • 必须在Jupyter Notebook/Lab中运行代码,普通Python脚本无法渲染ipywidgets组件并响应交互。
  • Jupyter Lab用户需确保ipywidgets扩展安装正确,否则组件可能无法触发事件。

内容的提问来源于stack exchange,提问作者João Pimentel Ferreira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 13:58:15