Это похоже на базовый 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()
), написанные людьми, кроме меня. Эти функции печатают материал, и я не могу (не разрешаю) изменять эти функции.