Python 全局变量未更新

Python 全局变量未更新,python,global-variables,Python,Global Variables,我是新来的,可能这是非常明显的,但我不明白: 我想保存单击的坐标(coords),以便与它们一起工作,但不知何故,这不起作用。顺便说一句,我仍然使用Python 2.7 提前谢谢 import matplotlib.pyplot as plt plt.close('all') coords=[] # Simple mouse click function to store coordinates def onclick(event): global coords, xi,yi

我是新来的,可能这是非常明显的,但我不明白: 我想保存单击的坐标(coords),以便与它们一起工作,但不知何故,这不起作用。顺便说一句,我仍然使用Python 2.7

提前谢谢

import matplotlib.pyplot as plt

plt.close('all')
coords=[]


# Simple mouse click function to store coordinates
def onclick(event):
    global coords, xi,yi
    xi,yi =event.xdata, event.ydata
    coords.append((xi,yi))
    if len(coords) == 2:
        fig.canvas.mpl_disconnect(cid)
        plt.close(1)



    return coords, xi , yi 




x = np.arange(-10,10)
y = x**2

fig = plt.figure(1)
ax = fig.add_subplot(111)
ax.plot(x,y)
plt.show(1)


# Call click func
cid = fig.canvas.mpl_connect('button_press_event', onclick)
print coords



你看到了什么,你希望看到什么?坐标仍然是空的,尽管我想得到坐标((xi_1,yi_1),(xi_2,yi_2)…可能是我基于这个问题构建的坐标的副本。但是当然它不起作用(对我来说),因此首先是问题。@ChristianWolff:我认为问题在于你在plt.show之后调用mpl_connect。plt.show方法将仅显示您之前配置的内容,如果您在显示绘图之前未配置单击事件,则不会对其进行注册。我现在可以用一个简单的例子来证明这一点,同样是Python3.6.5和Matplotlib 3.3.3:当我将mpl_connect放在plt.show之前时,一切正常。这里的全局变量没有实际问题。你看到了什么,你希望看到什么?坐标仍然是空的,尽管我想得到坐标((xi_1,yi_1),(xi_2,yi_2)…可能是我基于这个问题构建的坐标的副本。但是当然它不起作用(对我来说),因此首先是问题。@ChristianWolff:我认为问题在于你在plt.show之后调用mpl_connect。plt.show方法将仅显示您之前配置的内容,如果您在显示绘图之前未配置单击事件,则不会对其进行注册。我现在可以用一个简单的例子来证明这一点,同样是Python3.6.5和Matplotlib 3.3.3:当我将mpl_connect放在plt.show之前时,一切正常。这里的全局变量没有实际问题。