这似乎是一个基本问题,但我尝试了一段时间并没有找到 Pyviz Panel 的解决方案:
我正在尝试通过单击按钮来触发功能,捕获功能的输出并将它们打印在屏幕上所需的位置。
ipywidgets 中的with output
功能是我想要实现的目标的一个很好的例子:
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()
由我以外的人编写的函数()。这些功能打印的东西,我不能(不允许)改变这些功能。