Jupyter Notebook Widgets: Как создать текстовое поле «Фильтровать при вводе»? - PullRequest
2 голосов
/ 14 февраля 2020

Я пытаюсь создать виджет текстового поля «фильтр по мере ввода» в моем блокноте Jupyter, в котором, если я пишу M, он отображает все проигрыватели с «M» ... если я набираю O после M, он отображает проигрыватели с «МО» в их названии (например, МОХАМЕД САЛА И МО САЛА) и так далее. Код ниже работает довольно хорошо. ЕДИНСТВЕННАЯ проблема, с которой я сталкиваюсь, состоит в том, что он продолжает добавлять результат к ячейке ... поэтому, если я напишу 3 буквы, он отобразит 3 таблицы. Я хочу очистить предыдущий вывод, чтобы у меня всегда был только самый последний результат. Как я могу это сделать?

import pandas as pd, IPython.display, ipywidgets as widgets 
out = widgets.Output()
display(out)

df = pd.DataFrame ({'PLAYER':['MOHAMED SALAH', 'MESSI', 'MO SALAH', 'RONALDO']})
display(df)

textbox = widgets.Text(value='', description='Player:')
display(textbox)

def display_result(value):
    value = str(value['new']).upper() 
    if "{" not in value: 
        print(value)
        result = df[(df['PLAYER'].str.contains(value))]  
        if result.shape[0]>0: display(result)


textbox.observe(display_result) 

Вывод: enter image description here

1 Ответ

0 голосов
/ 14 февраля 2020

Вы просто пропускаете вызов out.clear_output() в своей функции!

import pandas as pd, IPython.display, ipywidgets as widgets 
out = widgets.Output()
display(out)

df = pd.DataFrame ({'PLAYER':['MOHAMED SALAH', 'MESSI', 'MO SALAH', 'RONALDO']})

textbox = widgets.Text(value='', description='Player:')
display(textbox)

def display_result(value):
    value = str(value['new']).upper() 
    if "{" not in value:
        result = df[(df['PLAYER'].str.contains(value))]  
        out.clear_output()
        if result.shape[0]>0:
            with out:
                display(result)


textbox.observe(display_result)
...