добавление методов on_click к кнопкам, созданным с помощью ipywidgets - PullRequest
1 голос
/ 05 апреля 2020

Я использую ipywidgets для создания панели инструментов.

Я создаю кучу кнопок, используя al oop:

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 кнопками:

enter image description here

Вопрос в том, какова стратегия в отношении того, как обрабатывать все методы on_click кнопки, так как все кнопки называются одинаковыми. У кнопок есть своего рода идентификатор?

представьте, что, нажимая каждую кнопку, я хочу получить определенные данные в Интернете. как поступить?

спасибо.

Ответы [ 2 ]

1 голос
/ 05 апреля 2020

Попробуйте это:

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)
0 голосов
/ 06 апреля 2020

Как насчет определения ваших 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
...