4

这似乎是一个基本问题,但我尝试了一段时间并没有找到 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()由我以外的人编写的函数()。这些功能打印的东西,我不能(不允许)改变这些功能。

4

1 回答 1

0

您可以print在代码中添加语句并在浏览器控制台中查看打印的语句。 控制台输出 您可以Ctrl+Shift+I在 Firefox 或 Chrome 中直接访问控制台。

我也很沮丧,因为在使用面板时我无法将任何内容打印到单元格输出中。这确实限制了调试能力。感谢 Panel Discourse 平台中的一位用户向我指出这一点。

于 2020-08-23T20:45:16.567 回答