繁体   English   中英

是否可以使用Python中的单个function获得具有不同输出的多个按钮?

[英]Is it possible to get multiple buttons with different outputs using a single function in Python?

我在 Python Jupyter Notebook 中创建了一个按钮并将其标记为Label1

我有一个名为a的列表,其中包含从 1 到 5 的数字。

我写了一个 function on_button_clicked这样在点击按钮时,它返回 5 倍的第a项目。 所以在点击Label1按钮时,它返回 5。

我的代码如下所示:

from IPython.display import display
from ipywidgets import widgets

button1 = widgets.Button(description = "Label1")

output = widgets.Output()

display(button1, output)

a = [1,2,3,4,5,6]

def on_button_clicked(x):
    with output:
        print (a[0]*5)

button1.on_click(on_button_clicked)

附上屏幕截图以显示按钮的外观: 在此处输入图像描述

我想要另外四个按钮: Label2Label3Label4Label5

当我尝试为按钮编写嵌套的 function 并嵌入 function 时,

def get_labels(x):
    a = [1,2,3,4,5]
    button = widgets.Button(description = f"Label{x}")
    output = widgets.Output()
    
    display(button, output)
    
    def on_button_clicked(x):
        with output:
            print (a[x-1]*5)
            
    button.on_click(on_button_clicked)

label2 = get_labels(2)

我有: 在此处输入图像描述

TypeError: 不支持的操作数类型 -: 'Button' 和 'int'

似乎需要为每个on_click()分配一个回调,这基本上是一个 function。我的问题是:是否可以编写一个 function 来为每个按钮分配回调,或者它们应该为每个按钮单独分配? function 会是什么样子?

你可以这样写:

from IPython.display import display
from ipywidgets import widgets

a = [1,2,3,4,5]
N_buttons=5
buttons=[widgets.Button(description = 'Label'+str(i+1)) for i in range(N_buttons)]
outputs=widgets.HBox([items for items in buttons])
def on_button_clicked(x):
     index_button=int(x.description[-1])
     print('Label'+str(index_button)+' button:'+str(a[index_button-1]*5))

for i in range(N_buttons):
  buttons[i].on_click(on_button_clicked)

display(outputs)

迭代创建按钮,然后为每个按钮关联一个通用的on_button_clicked function,它使用按钮的描述来索引您的列表a

这段代码的output如下所示: 在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM