簡體   English   中英

將 on_click 方法添加到使用 ipywidgets 創建的按鈕

[英]adding on_click methods to buttons created with ipywidgets

我正在使用 ipywidgets 創建儀表板。

我使用循環創建了一堆按鈕:

from ipywidgets import GridspecLayout

grid = GridspecLayout(4, 3)
def create_expanded_button(description, button_style):
    return Button(description=description, button_style=button_style, layout=Layout(height='auto', width='auto'))


for i in range(4):
    for j in range(3):
        grid[i, j] = create_expanded_button('Button {} - {}'.format(i, j), 'warning')
grid

這是文檔中的代碼。 使用這樣的代碼,您可以創建一個包含 16 個按鈕的儀表板:

在此處輸入圖像描述

問題是如何處理按鈕的每個 on_click 方法的策略是什么,因為所有按鈕都被稱為相同。 按鈕有某種“id”嗎?

想象一下,通過單擊每個按鈕,我想在線獲取特定數據。 如何進行?

謝謝。

嘗試這個:

def on_btn_click(btn):
    if btn.description == 'Button 0 - 0':
        # do something on Button 0 - 0 click
    elif btn.description == 'Button 0 - 1':
        # do something on Button 0 - 1 click
    ...


for i in range(4):
    for j in range(3):
        grid[i,j].on_click(on_btn_click)

先定義你的 API 和調用函數,然后遍歷那些創建按鈕怎么樣?

from ipywidgets import GridspecLayout, Button

grid = GridspecLayout(3, 1)

def call_api_1(button):
    print('calling_api_1')

def call_api_2(button):
    print('calling_api_2')

def call_api_3(button):
    print('calling_api_3')

api_dict = {
    'API 1': call_api_1,
    'API 2': call_api_2,
    'API 3': call_api_3,
}

for index, (api_name, func) in enumerate(api_dict.items()):
    button = Button(description = api_name)
    button.on_click(func)
    grid[index,0] = button

grid

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM