31

ipython ノートブック ウィジェットで button.on_click にハンドラーを登録できますが、ドロップダウン ウィジェットで同じことを行う方法がわかりません。

import ipywidgets as widgets
from IPython.display import display

def on_button_clicked(b):
    print("Button clicked.")

button = widgets.Button(description="Click Me!")
display(button)

button.on_click(on_button_clicked)

しかし、

choose_task = widgets.Dropdown(
    options=['Addition', 'Multiplication', 'Subtraction'],
    value='Addition',
    description='Task:',
)

しかないようです

on_trait_change(...)

これでハンドラーを登録すると、それを使用してウィジェットの値にアクセスできますか? ハンドラーとウィジェットがサブクラスに属している例を見てきましたが、ハンドラーは self を使用してイントロスペクトできます。しかし、サブクラスを使用したくない場合、ハンドラーはどのウィジェットがイベントのターゲットであったかをどのように認識しますか?

4

6 に答える 6

6

で変更名を指定できますobserve。これにより、よりクリーンなコードが作成され、不要な変更に対してハンドラーが呼び出されることはありません。

from IPython.display import display
from ipywidgets import Dropdown

def dropdown_eventhandler(change):
    print(change.new)

option_list = (1, 2, 3)
dropdown = Dropdown(description="Choose one:", options=option_list)
dropdown.observe(dropdown_eventhandler, names='value')
display(dropdown)
于 2019-12-27T09:28:04.610 に答える
2

アイデアは、値などの特性を使用することだと思います。例えば:

from ipywidgets import Dropdown

def handle_change():
    print type_sel.value

type_sel = Dropdown(description="Keypoint type", options=['surf', 'orb'])
type_sel.on_trait_change(handle_change, name="value")
display(type_sel)

SciPy 2015 上級 Jupyter ビデオ チュートリアル

于 2015-12-22T14:29:38.623 に答える