Ich habe eine Funktion fun()
, die einen Callback callback()
bindet, wenn eine Matplotlib Abbildung angeklickt wird. Ich möchte, dass dieser Callback auf den Variablenbereich fun()
zugreifen kann, um Änderungen vorzunehmen. Wie kann ich das tun?Python Callback Variable Bereich
import numpy as np
import matplotlib.pyplot as plt
def callback(event):
data = event.xdata
def fun():
data = 0
fig, ax = plt.subplots()
ax.plot(np.random.rand(12), np.random.rand(12), 'go')
fig.canvas.mpl_connect('button_release_event', callback)
plt.show()
return data
print fun()
Putting data
im global
Umfang ist keine akzeptable Lösung. Die Funktion sollte eigenständig sein. Die Antwort here würde mir erlauben, Variablen an callback()
zu übergeben, aber ließ mich sie nicht bearbeiten.
Verwenden Sie eine geschachtelte Funktion (definieren Sie Ihren Rückruf im Körper von Spaß). Beachten Sie jedoch, dass die Fun-Funktion bereits beendet wurde, wenn Ihr Callback aufgerufen wird. –
Ich habe bereits eine verschachtelte Funktion in '' 'fun()' '' versucht: es funktioniert nicht. Ein geschachtelter '' 'Callback()' '' kann auf den Bereich von '' 'fun()' '' zugreifen, aber er kann ihn nicht verändern. Probieren Sie es selbst aus. Außerdem wird die Funktion normalerweise erst beendet, wenn '' 'plt.show()' '' gelöst ist (d. H. Nach einer Canvas-Interaktion). Ich habe keine Probleme mit vorzeitiger Beendigung im obigen Skript. – SkyNT
In der Tat können Sie mit einem kleinen Trick. Siehe http://stackoverflow.com/questions/6198709/how-do-i-change-nesting-functions-variable-in-the-nested-function. Sie können ein dict wie d = dict (data = 0) verwenden und dann d ["data"] in der verschachtelten Funktion ändern. –