4

私はここで新しいだけでなく、pythonと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()
4

1 に答える 1

4

可変オブジェクトとクロージャーを使用してこれを行うことができます。

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']

listこれを使用して、およびでこれを行うこともappend、独自のクラスを作成することもできます。

于 2013-02-22T20:59:40.887 に答える