![](/img/trans.png)
[英]Update Multiple Python Variables With Single Function and Different Kivy Buttons
[英]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)
我想要另外四个按钮: Label2
、 Label3
、 Label4
和Label5
。
当我尝试为按钮编写嵌套的 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
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.