我想在Python (2.7) Tkinter应用程序(在Windows 7 PC上)中嵌入一个Cartopy模块映射,但我需要帮助弄清楚如何实现。
据我所知,Cartopy模块只允许matplotlib将其“地块”或绘图视为坐标,并将其投影到真实的地理投影中。现在,我已经看到了关于如何将matplotlib嵌入到Tkinter中的问题和指南,但这些问题总是涉及创建matplotlib图(),然后在该图形上使用show()方法和FigureCanvasTkAgg(),而创建cartopy映射的指令通常是简单地使用pyplot的axes()方法,同时提供一个cartopy投影对象,然后在pyplot模块(而不是图对象)中使用show()。我尝试过一些不同的方法,但我无法理解如何协调这两种方法(创建cartopy matplotlib和在Tkinter中嵌入matplotlib )。我有制图、Python和Tkinter方面的经验,但我对matplotlib和cartopy还不熟悉,所以我可能还不太了解这些模块。
如果有人能给出一个具体的代码示例并给出他们的答案,那将是非常有帮助的。看到一个如何在新嵌入的cartopy地图中绘制线条或点的示例也很好,例如,我应该在哪个对象上使用.plot()方法?
从长远来看,希望能够通过Tkinter应用程序与cartopy地图进行交互。顺便说一句,以前有人做过这样的肉搏战吗?
->答案:感谢@Pelson给出了您的答案,并提供了代码示例。对于其他有同样问题的人来说,我理解的关键步骤是: 1)创建matket图图形;2)通过包含一个投影参数(从而使其成为Cartopy轴)向图形添加一个轴;3)使用FigureCanvasTkAgg函数将图形转换为Tkinter小部件,然后使用其show()和get_tk_widget()方法将小部件打包或放置在Tkinter窗口中。
发布于 2013-12-05 09:10:33
Cartopy和pyplot没有什么特别之处--所有东西都将与matplotlib的OO接口一起工作。这意味着嵌入Cartopy轴与在任何GUI工具箱中嵌入matplotlib轴一样困难。
在本例中,我以tk2.html为例,简单地添加了以下几行:
# Use add_axes or add_subplot.
ax = fig.add_axes([0.01, 0.01, 0.98, 0.98],
projection=ccrs.InterruptedGoodeHomolosine())
# ax = fig.add_subplot(1, 1, 1, projection=ccrs.InterruptedGoodeHomolosine())
ax.set_global()
ax.stock_img()
ax.coastlines()我的完整应用程序看起来如下:
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
import cartopy.crs as ccrs
import sys
import Tkinter as Tk
root = Tk.Tk()
root.wm_title("Cartopy in TK")
fig = Figure(figsize=(8,4), dpi=100)
ax = fig.add_axes([0.01, 0.01, 0.98, 0.98],
projection=ccrs.InterruptedGoodeHomolosine())
ax.set_global()
ax.stock_img()
ax.coastlines()
ax.set_title('Cartopy and Tkinter')
# a tk.DrawingArea
canvas = FigureCanvasTkAgg(fig, 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)
button = Tk.Button(master=root, text='Quit', command=sys.exit)
button.pack(side=Tk.BOTTOM)
Tk.mainloop()若要生成类似于以下内容的Tkinter GUI应用程序:

https://stackoverflow.com/questions/20385453
复制相似问题