Python 单击鼠标将图像坐标指定给变量

Python 单击鼠标将图像坐标指定给变量,python,Python,下面的代码给出了鼠标单击事件中图像的x和y坐标。我想将x和y坐标分配给全局变量x和y,而不是打印它们,然后关闭图像。请问我该怎么做 %matplotlib tk import matplotlib.pyplot as plt import matplotlib.image as mpimg fig = plt.figure(figsize=(20,30)) img=mpimg.imread(workingimage) def onclick(event): ix, iy = eve

下面的代码给出了鼠标单击事件中图像的x和y坐标。我想将x和y坐标分配给全局变量
x
y
,而不是打印它们,然后关闭图像。请问我该怎么做

%matplotlib tk
import matplotlib.pyplot as plt
import matplotlib.image as mpimg

fig = plt.figure(figsize=(20,30))

img=mpimg.imread(workingimage)

def onclick(event):
    ix, iy = event.xdata, event.ydata
    print(ix, iy)

cid = fig.canvas.mpl_connect('button_press_event', onclick)

imgplot = plt.imshow(img)
plt.show()

您可以将这些值分配给2个全局变量并调用
plt.close()

%matplotlib-tk
将matplotlib.pyplot作为plt导入
将matplotlib.image导入为mpimg
图=plt.图(图尺寸=(20,30))
img=mpimg.imread(工作图像)
def onclick(事件):
全局在x上单击,在y上单击
在x上单击,在y上单击=event.xdata,event.ydata
plt.close()
cid=fig.canvas.mpl\u connect('button\u press\u event',onclick)
imgplot=plt.imshow(img)
plt.show()
打印(“点击位置”,点击x,点击y)
#代码的其余部分

您可以将值分配给两个全局变量,然后调用
plt.close()

%matplotlib-tk
将matplotlib.pyplot作为plt导入
将matplotlib.image导入为mpimg
图=plt.图(图尺寸=(20,30))
img=mpimg.imread(工作图像)
def onclick(事件):
全局在x上单击,在y上单击
在x上单击,在y上单击=event.xdata,event.ydata
plt.close()
cid=fig.canvas.mpl\u connect('button\u press\u event',onclick)
imgplot=plt.imshow(img)
plt.show()
打印(“点击位置”,点击x,点击y)
#代码的其余部分

因此我修改了您的代码,使其能够正常工作:

#%matplotlib tk
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import time

fig = plt.figure(figsize=(20,30))

img=mpimg.imread(working_image)


def onclick(event):
    ix, iy = event.xdata, event.ydata
    #global x,y
    #x,y = ix,iy
    #print(ix, iy)
    plt.close() #closing the figure
    get_x(ix,iy)

def get_x(pX,pY):
    print("X-Coordinate: " + str(pX))
    print("Y-Coordinate: " + str(pY))

cid = fig.canvas.mpl_connect('button_press_event', onclick)

imgplot = plt.imshow(img)
plt.show()
这些变化:

ix,iy
传递给下一个需要它们作为参数的函数。您可以将它们指定为全局变量,这样就不需要参数,但应该避免使用全局变量

plt.close(图)
关闭名为
fig


因此,我希望这能回答您的所有问题,因此我修改了您的代码,使其能够正常工作:

#%matplotlib tk
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import time

fig = plt.figure(figsize=(20,30))

img=mpimg.imread(working_image)


def onclick(event):
    ix, iy = event.xdata, event.ydata
    #global x,y
    #x,y = ix,iy
    #print(ix, iy)
    plt.close() #closing the figure
    get_x(ix,iy)

def get_x(pX,pY):
    print("X-Coordinate: " + str(pX))
    print("Y-Coordinate: " + str(pY))

cid = fig.canvas.mpl_connect('button_press_event', onclick)

imgplot = plt.imshow(img)
plt.show()
这些变化:

ix,iy
传递给下一个需要它们作为参数的函数。您可以将它们指定为全局变量,这样就不需要参数,但应该避免使用全局变量

plt.close(图)
关闭名为
fig


所以我希望这能回答你所有的问题

谢谢你的代码。不幸的是,当我点击图像
x
时,我仍然显示0的值能够重现错误,我将检查周一您可能想要阅读文档的变量和范围页面。是的,愚蠢的错误…,我编辑了我的答案,以便如果您真的想全局使用变量,它现在可以工作,约翰在他的回答中表明了这一点。我编辑了一个选项的答案,在这个选项中,我将它们作为参数处理,然后将它们交给下一个方法。。。thx William Miller感谢您的代码。不幸的是,当我点击图像
x
时,我仍然显示0的值能够重现错误,我将检查周一您可能想要阅读文档的变量和范围页面。是的,愚蠢的错误…,我编辑了我的答案,以便如果您真的想全局使用变量,它现在可以工作,约翰在他的回答中表明了这一点。我编辑了一个选项的答案,在这个选项中,我将它们作为参数处理,然后将它们交给下一个方法。。。thx威廉·米勒