在matplotlib

时间:2018-07-09 15:32:02

标签: user-interface matplotlib interaction

我有一个绘图代码,旨在:

首先:绘制一张内部有许多红/蓝点的图像。
第二个:使用鼠标选择要删除的点和要更改颜色的点
第三:更新我的点数据库。

为了实现我的目标,我打算使用mpl_connectstart_event_loop

cid1=fig.canvas.mpl_connect('button_press_event',onclick)
fig.canvas.start_event_loop(timeout = -1)

在我的onclick事件中,我有if / else句子:

如果单击鼠标左键,将删除选定的点,
如果右键单击:要更改所选点的颜色,
如果点击中点:退出活动代码,然后继续执行我的代码。

elif event.button == 2:
    print("exit and continue")
    fig.canvas.stop_event_loop
    fig.canvas.mpl_disconnect(cid1)

但是,当我运行此代码并按图中的中键时,该代码将无法继续执行。

有没有可以使流程回到主代码的功能?

代码如下:

import ...

def onclick(event):
    if event.button == 1:
        get click axis and delete the points in list
    elif event.button == 3:
        get click axis and change the points attribute in list
    elif event.button == 3:
        print("exit and continue")
        fig.canvas.stop_event_loop
        fig.canvas.mpl_disconnect(cid1)

if __name__== "__main__":
plt.ion()

//my data reading code

fig =  plt.figure()
ax1 = fig.add_subplot(1,1,1)
ax1.imshow(data,origin="lower")
dot.append(ax1.plot(peak[i]["coord"][0],peak[i]["coord"][1],color(peak[i]["atom"])+"o",markersize=1))   //plot dots

cid1=fig.canvas.mpl_connect('button_press_event',onclick)
fig.canvas.start_event_loop(timeout = -1)

// I want to first do the clicking, and continue my remaining codes here after.
print("continue") 

0 个答案:

没有答案