Как отобразить вывод текста из функции в виджетах Panel Pyviz? - PullRequest
2 голосов
/ 21 января 2020

Это похоже на базовый c вопрос, но я пытался некоторое время и не нашел решения с помощью Pyviz Panel:

Я пытаюсь вызвать функции одним щелчком мыши. кнопку, поймать результаты функций и распечатать их на экране в нужных местах.

Функциональность with output в ipywidgets является хорошим примером того, чего я хочу достичь:

import ipywidgets as widgets
from IPython.display import display

button = widgets.Button(description="Click Me!")
output = widgets.Output()

display(button, output)

def on_button_clicked(b):
    with output:
        print("Button clicked.")

button.on_click(on_button_clicked)

Однако я не могу понять, как это сделать с Panel. Вот простой пример того, что я пытаюсь сделать на Pyviz Panel.

import panel as pn
pn.extension()
import panel.widgets as pnw

text_output_widget = pnw.StaticText(value='orginal output')
some_button = pnw.Button(name='test',button_type = 'primary')


def callbackfn(WatchedEvents):
    text_output_widget.value = 'new output'
    print('Function successfully run')
    third_party_function() #prints a bunch of stuff


some_button.on_click(callbackfn)
pn.Column(some_button,text_output_widget)

Однако вывод оператора print('Function successfully run') в функции callbackfn() теряется в процессе. Как мне перехватить этот текстовый вывод?

РЕДАКТИРОВАТЬ: Добавлено чуть более подробно в функцию callbackfn для более конкретного представления моего варианта использования. Я должен запускать функции (third_party_function()), написанные людьми, кроме меня. Эти функции печатают материал, и я не могу (не разрешаю) изменять эти функции.

...