如何从 Jupyter 文本小部件获取鼠标选择的文本?

Sha*_*kti 9 python jupyter-notebook ipywidgets

我想从 jupyter 文本小部件捕获鼠标选择的文本。

import ipywidgets as widgets
text = widgets.Textarea(
    value='Hello World',
    description='String:',
    disabled=False
)
display(text)
Run Code Online (Sandbox Code Playgroud)

在下面的示例中,当选择世界并完成左键单击时,我想捕获突出显示的文本。

在此输入图像描述

igr*_*nis 5

使用 JS,您可以在select原始text小部件的事件上添加侦听器。然后所选文本将复制到sel_text小部件中。最后你可以通过以下方式访问它sel_text.value

import ipywidgets as widgets
from IPython.display import Javascript

ta_description = 'String:'
text = widgets.Textarea(
    value='Hello big World',
    description=ta_description,
    disabled=False
)
sel_text = widgets.Text(
    value='',
    description='selected text:',
    disabled=True
)
display(text, sel_text)

jscript = f'''

function put2widget(arg) {{
    var manager = window.IPython.WidgetManager._managers[0];
    var ta = manager.get_model('{sel_text.model_id}');
    ta.then(function(model) {{
        model.set('value', arg)
        model.save()
    }});
}}

function getSelection(event) {{
  const selection = event.target.value.substring(event.target.selectionStart, event.target.selectionEnd);
  put2widget(selection)

}}

const area = document.querySelectorAll('label[title="{ta_description}"]')[0].parentNode.getElementsByTagName('textarea')[0]
area.addEventListener("select", getSelection); 

'''

Javascript(jscript)
Run Code Online (Sandbox Code Playgroud)