0

ノートブックで 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トグル状態に応じて交互に出力します。

コールバック/クラス定義の何が問題になっていますか?

4

1 に答える 1