2017-07-24 2 views
0

J'essaie d'enregistrer des fichiers avec un nom particulier en tant qu'événement on_key_press dans matplotlib.Erreur de type à l'aide d'arguments positionnels dans les événements Matplotlib

Voici mon code, à la suite d'un complot matplotlib:

save_name = 'folder_name/' + file_name[12:-5] 

def save_figure(event, save_name): 
    if event.key == 'w': 
     plt.savefig(save_name) 


fig.canvas.mpl_connect('key_press_event', save_figure(save_name)) 

Mais quand je lance ce code, je reçois l'erreur suivante:

TypeError: save_figure() missing 1 required positional argument: 'save_name' 

Je ne sais pas comment passer le save_name variable à la fonction save_figure.

Répondre

1
save_name = 'folder_name/' + file_name[12:-5] 

def save_figure(event): 
    if event.key == 'w': 
     plt.savefig(save_name) 

fig.canvas.mpl_connect('key_press_event', save_figure) 

Les fonctions peuvent accéder à des variables dans les étendues extérieures, de sorte save_figure peuvent déjà accéder save_name, au moins dans votre exemple de code.

1

vous avez passé save_name comme argument event. save_figurerequiert 2 arguments. votre appel de save_figure() n'a qu'un seul argument. l'ordre des arguments compte aussi. donc quand vous appelez save_figure il doit ressembler à:

save_figure(event,save_name) 
1

Sans changer la fonction existante, une méthode habituellement utilisée pour ce genre de problème serait d'utiliser une fonction annonymous.

fig.canvas.mpl_connect('key_press_event', lambda event: save_figure(event,save_name))