想在while循环中获取鼠标坐标

Want to get the mouse coordinate in a while loop

我想获取多张图片的鼠标点击坐标。这是我的代码:

import matplotlib.pyplot as plt

j = 0
while j < nb_images:
    plt.ion()
    fig = plt.figure()
    coords = []
    #Affichage
    plt.imshow(img[j], cmap="gray")
    plt.draw()

    while len(coords) <1:
        cid = fig.canvas.mpl_connect('button_press_event', onclick)

    print(coords[0][0], coords[0][1])
j = j + 1

def onclick(event):
    global ix, iy
    ix, iy = event.xdata, event.ydata
    global coords
    coords.append((ix, iy))
    if len(coords) == 1:
        fig.canvas.mpl_disconnect(cid)
        plt.close()
    return coords

问题是我无法点击图形获取坐标。人影很忙。我该如何解决? 谢谢

我正在尝试回答,虽然我无法测试,但无法在 windows 上获取 mathplotlib,所以我确定它不能按原样工作,但至少它纠正了创建事物和回调。

发布的代码有很多缺陷:

  • 它依赖于一种交互式的做事方式。 Mathplotlib 定义了回调并有一个主循环(plt.show() 需要被调用
  • 存在无限循环,因为 j 增加在 while 循环之外。我用 for
  • 简化了循环
  • 所有操作都应在 onclick 回调中执行。

随时编辑

import matplotlib.pyplot as plt
i = 0

def onclick(event):
    global ix, iy, i
    ix, iy = event.xdata, event.ydata
    global coords
    coords.append((ix, iy))
    print("clicked "+str(coords))
    i+=1
    if i == nb_images:
         plt.close()
         fig.canvas.mpl_disconnect(cid)
         # then do something with the coords array
    else:
         # show next image and go one
         plt.imshow(img[i], cmap="gray")

plt.ion()
fig = plt.figure()

plt.imshow(img[0], cmap="gray")


fig.canvas.mpl_connect('button_press_event', onclick)
plt.draw()
plt.show()