繁体   English   中英

如何在PyViz中使用带回调(在类中)的切换按钮?

[英]How to use a toggle button with a callback (in an class) in PyViz?

我在笔记本中使用PyViz / Panel。 现在我想在类中使用切换按钮,并将回调绑定到它。

这段代码 - 在课堂外 - 正在起作用:

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

toggle = pn.widgets.Toggle(name='Toggle')

def callback(*events):
    if toggle.active is True: toggle.name = 'Active'
    else: toggle.name = 'Toggle'

watcher = toggle.param.watch(callback, 'active')
toggle.param.set_param(active=False)
toggle.param.trigger('active')

pn.Row(toggle)

它会生成一个切换按钮,单击此按钮时,文本会发生变化。

不,我试图将所有内容都放在类定义中:

class ToggleInClass():
    def __init__(self):
        self.toggle = pn.widgets.Toggle(name='Toggle')
        self.watcher = self.toggle.param.watch(callback, 'active')
        self.toggle.param.set_param(active=False)
        self.toggle.param.trigger('active')

    def callback(self, *events):
        if toggle.active is True: toggle.name = 'Active'
        else: toggle.name = 'Toggle'

toggle_in_class = ToggleInClass()
pn.Row(toggle_in_class.toggle)

再次生成一个按钮,但这次回调似乎不起作用:文本永远不会改变。

观察者似乎没问题: toggle_in_class.watcher给出Watcher(inst=Toggle(), cls=<class 'panel.widgets.Toggle'>, fn=<function callback at 0x000001EC8419E510>, mode='args', onlychanged=True, parameter_names=('active',))

toggle_in_class.toggle.active的输出根据切换状态交替显示。

我的回调/类定义有什么问题?

纠正一些愚蠢的错别字后,这段代码对我有用:

class ToggleInClass():

    def __init__(self):
        self.toggle = pn.widgets.Toggle(name='Toggle')
        self.watcher = self.toggle.param.watch(self.callback, 'active')
        self.toggle.param.set_param(active=False)

    def callback(self, *events):
        if self.toggle.active is True: self.toggle.name = 'Active'
        else: self.toggle.name = 'Toggle'

toggle_in_class = ToggleInClass()
pn.Row(toggle_in_class.toggle)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM