2013-02-22 126 views
2

即時新在這裏,以及新的python和matplotlib也。如何從button_press_event matplotlib返回一個值?

我想創建一個代碼,它允許我從函數定義中獲取座標(event.xdata),以便稍後可以使用該數據。但是到目前爲止我已經能夠閱讀,一些變量是局部變量(函數內部的變量),另一些變量是全局變量(我們希望以後使用的變量)。我嘗試了'全局'選項,我也讀了不是最好的,它沒有奏效...解決方案當然可以從定義的揀選函數返回值...問題是我必須創建一個變量誰收到他的函數返回...但由於這是一個事件(不是一個簡單的函數),我不能要求一個變量來接收返回,因爲它是一個事件發生在繪圖後。在可能應該是類似的東西(?):

import matplotlib.pyplot as plt 
import numpy as np 

asd =() #<---- i need to create a global variable before i can return a value in it? 
fig = plt.figure() 
def on_key(event): 
    print('you pressed', event.key, event.xdata, event.ydata) 
    N=event.xdata 
    return N in asd #<---- i want to return N into asd 

cid = fig.canvas.mpl_connect('key_press_event', on_key) 
lines, = plt.plot([1,2,3]) 
NAAN=on_key(event) #<---- just to try if return alone worked... but on_key is a function which happens in the plot event... so no way to take the info from the return 
plt.show() 

回答

3

您可以用可變對象和封鎖做到這一點:

mutable_object = {} 
fig = plt.figure() 
def on_key(event): 
    print('you pressed', event.key, event.xdata, event.ydata) 
    N=event.xdata 
    mutable_object['key'] = N 

然後,您可以讓您的值回來了

N = mutable_object['key'] 

使用這個,你也可以用listappend來做到這一點,或者創建你自己的類,等等。

+0

謝謝!這是我正在尋找的 – user2100687 2013-03-01 19:04:10