想在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()
我想获取多张图片的鼠标点击坐标。这是我的代码:
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()