向使用 ipywidgets 创建的按钮添加 on_click 方法
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
我正在使用 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