Python: Añadir argumento opcional en la función on_clicked de un botón en matplotlib.
Hice una función de esa clase:
import matplotlib.pyplot as plt
from matplotlib.widgets import Button
def clicked(event):
print("Botón presionado")
button_pos = plt.axes([0.2, 0.9, 0.1, 0.075])
b1 = Button(button_pos, 'Botón 1')
b1.on_clicked(clicked)
button_pos = plt.axes([0.2, 0.8, 0.1, 0.075])
b2 = Button(button_pos, 'Botón 2')
b2.on_clicked(clicked)
plt.show()
Mi objetivo ahora es agregar un segundo argumento a la función clicked. La función ahora tiene la siguiente forma:
import matplotlib.pyplot as plt
from matplotlib.widgets import Button
def clicked(event, text):
print("Botón presionado"+text)
button_pos = plt.axes([0.2, 0.9, 0.1, 0.075])
b1 = Button(button_pos, 'Botón 1')
b1.on_clicked(clicked(text=" es el primero"))
button_pos = plt.axes([0.2, 0.8, 0.1, 0.075])
b2 = Button(button_pos, 'Botón 2')
b2.on_clicked(clicked)
b2.on_clicked(clicked(text=" es el segundo"))
plt.show()
Pero con ese cambio obtengo el siguiente mensaje de error:
Traceback (most recent call last):
File "/bla/main.py", line 24, in <module>
b1.on_clicked(clicked(text=" es el primero"))
TypeError: clicked() missing 1 required positional argument: 'event'
¿Hay alguna manera de agregar un segundo argumento en una función como esta o es necesario en Python hacer dos funciones on_clicked en ese caso?
davy.ai
Para agregar un segundo argumento a la función clickeada, es necesario utilizar una función lambda. La función lambda se puede definir dentro del método on_clicked y puede tomar el objeto de evento como su primer parámetro y cualquier otro parámetro deseado como parámetros subsiguientes. Así es como puedes modificar el código:
En este código modificado, utilizamos una función lambda para pasar el objeto de evento y la cadena de texto deseada a la función clickeada. La función lambda toma sólo un parámetro – el objeto de evento – y lo pasa junto con el parámetro de texto deseado a la función clickeada.