2017-07-24 21 views
0

我試圖用matplotlib中的on_key_press事件來保存具有特定名稱的文件。在Matplotlib事件中使用位置參數的類型錯誤

這裏是我的代碼,下面有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)) 

但是當我運行這段代碼,我得到以下錯誤:

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

我不知道怎麼打發save_name變量爲save_figure函數。

回答

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) 

函數可以訪問外部範圍的變量,所以save_figure已經可以訪問save_name,至少在你的示例代碼。

1

您通過save_name作爲event參數。 save_figure需要2個參數。你的電話save_figure()只有一個說法。爭論的順序也很重要。所以,當你調用save_figure它需要看起來像:

save_figure(event,save_name) 
1

在不改變現有的功能,通常採用的方法爲這樣那樣的問題是使用一個annonymous功能。

fig.canvas.mpl_connect('key_press_event', lambda event: save_figure(event,save_name)) 
相關問題