我试图编写一个脚本,保存在绘图上的前两次鼠标点击的坐标(通过matplotlib生成),暂停脚本直到这些点击发生。我试图用while循环实现“pause”,一旦回调函数检测到鼠标被点击了两次,这个循环就应该结束了。但是,一旦while循环开始运行,单击绘图区域似乎没有效果。任何帮助都将不胜感激。在
coords = []
pause = True
fig, ax = plt.subplots()
plt.pcolormesh(x_grid, y_grid, arr)
plt.show()
def onclick(event):
global coords
coords.append((event.xdata, event.ydata))
if (len(coords)==2):
pause = False
fig.canvas.mpl_disconnect(cid)
cid = fig.canvas.mpl_connect('button_press_event', onclick)
while pause:
pass
# ...More code to follow, after the while loop finishes
编辑答案: 我会调查类似的东西,他们有一个演示应用程序,但这似乎正是你想要的功能。
https://matplotlib.org/devdocs/api/_as_gen/matplotlib.pyplot.ginput.html
这将使您的代码变成:
这将返回窗口中的前两个单击坐标,并保持绘图打开。
原始答案
你在乎点击后的情节被打开吗?如果不是,那么可以删除while循环,因为
^{pr2}$plt.show()
函数本身就是阻塞的。新版本的代码是:你可以随时(假设情节不是超长的渲染)在之后打个电话,比如:
在单击过程完成后生成绘图的非阻塞版本。(这看起来很蠢,但我似乎找不到一个快速的方法将一个阻塞的图形转换成一个非阻塞的图形)
相关问题 更多 >
编程相关推荐