【发布时间】:2013-06-12 16:26:38
【问题描述】:
我绘制了一组点并将该图嵌入到 Tkinter 画布中。我要做的是在单击一个/多个点时检索坐标。我能够使用以下代码(在嵌入到 Tkinter 之前)来做到这一点。但是,它仅适用于迭代中的第一个图。如何为接下来的 2 个地块扩展它?有人可以解释一下需要使用画布进行的更改吗?
outl=[]
index = []
list_rep = []
def on_pick(event):
thisline = event.artist
xdata, ydata = thisline.get_data()
tmp = []
index.append(i)
ind = event.ind
tmp.append(list(xdata[ind])[0])
tmp.append(list(ydata[ind])[0])
outl.append(tmp)
#print('on pick line:', zip(xdata[ind], ydata[ind]))
new_ydata1 = []
new_ydata2 = []
new_ydata3 = []
for i in range(3):
root = Tk.Tk()
root.wm_title("Embed in Tk")
ydata1 = np.array(Max_Correct_1[i])
ydata2 = np.array(Max_Correct_2[i])
ydata3 = np.array(Max_Correct_3[i])
Aveg=np.array(Avg[i])
f = Figure(figsize=(5,4), dpi=100)
ax1 = f.add_subplot(111)
ax1.axis([-9.5,-4.0,-10,105])
ax1.plot(Log_Values_Array,ydata1,'o',picker=7)
ax1.plot(Log_Values_Array,ydata2,'*',picker=7)
ax1.plot(Log_Values_Array,ydata3,'^',picker=7)
ax1.plot(Log_Values_Array,Aveg,'b--')
canvas = FigureCanvasTkAgg(f, master=root)
canvas.show()
canvas.get_tk_widget().pack(side=Tk.TOP, fill=Tk.BOTH, expand=1)
canvas._tkcanvas.pack(side=Tk.TOP, fill=Tk.BOTH, expand=1)
canvas.mpl_connect('pick_event',on_pick)
print outl
canvas.get_tk_widget().delete("all")
outl=[]
index = []
Tk.mainloop()
【问题讨论】:
-
我可以收集坐标,但有另一个问题。由于我在循环中运行它,例如3 个地块,它为 plot onw 选择坐标,但不为后续地块选择坐标。某处是否缺少清晰/更新?谢谢
-
这是使用 matplotlib 吗?如果是这样,您可能希望为此添加标签,和/或在描述中添加该信息。另外,您说它在抱怨某条特定线路,但没有显示抱怨是什么。你能显示你得到的实际错误吗?
-
嗨 Bryan,我能够摆脱事件错误,但是在下面的代码中,当我遍历绘图并选择点进行一些计算时,它仅适用于绘图 #1 .对于情节 2 和 3,pick_event 似乎不起作用。
-
我的原始帖子中有代码。
-
您需要定义“似乎不起作用”。这可能意味着很多事情:它是否引发错误?它是否有效,但没有达到您的预期?你确定它被调用了吗?在寻求帮助时,您需要比“它似乎不起作用”更具体一点。
标签: python canvas matplotlib tkinter coordinates