【问题标题】:adding on_click methods to buttons created with ipywidgets将 on_click 方法添加到使用 ipywidgets 创建的按钮
【发布时间】:2020-07-17 13:41:56
【问题描述】:

我正在使用 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”吗?

想象一下,通过单击每个按钮,我想在线获取特定数据。如何进行?

谢谢。

【问题讨论】:

    标签: python button onclick grid ipywidgets


    【解决方案1】:

    试试这个:

    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)
    

    【讨论】:

    • 但是当我对 on_btn_click 方法进行编码时,我怎么知道点击了哪个按钮?想象一下,当单击第一个左上角按钮时,我想要 a=1,而当我单击第一行的第二个按钮时,a=2。 ?
    • 例如,一个真实的案例是从 api 读取数据,调用不同的 API 读取实例股票值,具体取决于单击的按钮。
    • 你可以得到btn arg传递的信息,然后决定做什么。如果你不能通过每个按钮的信息来区分这些按钮,那么你可以编写12个不同的on_click方法。
    【解决方案2】:

    如何先定义您的 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-06
      • 1970-01-01
      • 2016-10-17
      • 1970-01-01
      • 1970-01-01
      • 2021-06-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多