ノートブックで 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
トグル状態に応じて交互に出力します。
コールバック/クラス定義の何が問題になっていますか?