如何在 PyViz 中使用带有回调的切换按钮(在 class 中)?
How to use a toggle button with a callback (in an class) in PyViz?
我在笔记本中使用 PyViz/Panel。现在我想在 class 中使用切换按钮,并将回调绑定到它。
此代码 - 在 class 之外 - 正在运行:
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 定义中:
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定义有什么问题?
纠正一些愚蠢的错别字后,这段代码对我有用:
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)
我在笔记本中使用 PyViz/Panel。现在我想在 class 中使用切换按钮,并将回调绑定到它。
此代码 - 在 class 之外 - 正在运行:
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 定义中:
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定义有什么问题?
纠正一些愚蠢的错别字后,这段代码对我有用:
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)