暂停Python脚本,直到用户单击plottwi

2024-04-19 15:27:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图编写一个脚本,保存在绘图上的前两次鼠标点击的坐标(通过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

Tags: 脚本event绘图matplotlibfigpltcoords鼠标
1条回答
网友
1楼 · 发布于 2024-04-19 15:27:32

编辑答案: 我会调查类似的东西,他们有一个演示应用程序,但这似乎正是你想要的功能。

https://matplotlib.org/devdocs/api/_as_gen/matplotlib.pyplot.ginput.html

这将使您的代码变成:

plt.pcolormesh(x_grid, y_grid, arr)
coords = plt.ginput(2, show_clicks=False)
plot.show(block=False)

这将返回窗口中的前两个单击坐标,并保持绘图打开。

原始答案

你在乎点击后的情节被打开吗?如果不是,那么可以删除while循环,因为plt.show()函数本身就是阻塞的。新版本的代码是:

^{pr2}$

你可以随时(假设情节不是超长的渲染)在之后打个电话,比如:

plt.pcolormesh(x_grid, y_grid, arr)
plt.show(block=False)

在单击过程完成后生成绘图的非阻塞版本。(这看起来很蠢,但我似乎找不到一个快速的方法将一个阻塞的图形转换成一个非阻塞的图形)

相关问题 更多 >