如何让 geopandas 地图出现在 wxpython window
How to get a geopandas map to appear in a wxpython window
我修改了一些我以前用来在 wxPython window 中显示 matplotlib 图形的代码,以便它在 wxPython window 中显示 geopandas 的地图。地图确实会显示,但是当我关闭 window 时,应用程序不会终止。我在 Mint 19.2 上使用 python 3.6、wxpython 4.0.1。
下面是一些演示该问题的示例代码:
import wx
import matplotlib
matplotlib.use('WXAgg')
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas
from matplotlib.figure import Figure
import geopandas as gpd
class MapCanvasPanel(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
self.figure = Figure()
self.axes = self.figure.add_subplot(111)
self.canvas = FigureCanvas(self, -1, self.figure)
self.sizer = wx.BoxSizer(wx.VERTICAL)
self.sizer.Add(self.canvas, 1, wx.LEFT | wx.TOP | wx.GROW)
self.SetSizer(self.sizer)
self.Fit()
# Read GeoDataFrame from file
self.uk_data = gpd.read_file("gadm36_GBR.gpkg")
def drawMap(self):
self.axes.clear()
self.uk_plot = self.uk_data.plot(ax=self.axes, color='white', edgecolor='black')
self.uk_plot.axis('off')
self.canvas.draw()
if __name__ == "__main__":
app = wx.App()
frame = wx.Frame(None, title='Test Map')
panel = MapCanvasPanel(frame)
panel.drawMap()
frame.Show()
app.MainLoop()
当我在 PyCharm 调试器中逐步执行代码时,会出现第二个 window(类似于 matplotlib 在交互模式下显示的 window)。当我关闭第二个 window 时,程序确实终止了。如果我 运行 程序正常,第二个 window 不会出现,但我怀疑它可能已经创建并被隐藏,这就是阻止程序关闭的原因。如何让我的程序正常终止?
注意:示例代码使用的 Geopackage 文件是通过在 https://gadm.org/download_country_v3.html 上选择 'United Kingdom' 然后单击 'Geopackage' link.
下载的
你不需要这条线:
matplotlib.use('WXAgg')
通过删除它,您的代码应该按预期运行(通过在 wx.Frame
上显示英国地图并在关闭此 window 时正确返回)。
请参阅有关 Embedding Matplotlib in graphical user interfaces 的 matplotlib 画廊,其中有一些使用 wxPython 的代码示例(也不使用 matplotlib.use
)。
(在 Python 3.6
、wx 4.0.1
和 matplotlib 2.2.3
上测试)
我修改了一些我以前用来在 wxPython window 中显示 matplotlib 图形的代码,以便它在 wxPython window 中显示 geopandas 的地图。地图确实会显示,但是当我关闭 window 时,应用程序不会终止。我在 Mint 19.2 上使用 python 3.6、wxpython 4.0.1。
下面是一些演示该问题的示例代码:
import wx
import matplotlib
matplotlib.use('WXAgg')
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas
from matplotlib.figure import Figure
import geopandas as gpd
class MapCanvasPanel(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
self.figure = Figure()
self.axes = self.figure.add_subplot(111)
self.canvas = FigureCanvas(self, -1, self.figure)
self.sizer = wx.BoxSizer(wx.VERTICAL)
self.sizer.Add(self.canvas, 1, wx.LEFT | wx.TOP | wx.GROW)
self.SetSizer(self.sizer)
self.Fit()
# Read GeoDataFrame from file
self.uk_data = gpd.read_file("gadm36_GBR.gpkg")
def drawMap(self):
self.axes.clear()
self.uk_plot = self.uk_data.plot(ax=self.axes, color='white', edgecolor='black')
self.uk_plot.axis('off')
self.canvas.draw()
if __name__ == "__main__":
app = wx.App()
frame = wx.Frame(None, title='Test Map')
panel = MapCanvasPanel(frame)
panel.drawMap()
frame.Show()
app.MainLoop()
当我在 PyCharm 调试器中逐步执行代码时,会出现第二个 window(类似于 matplotlib 在交互模式下显示的 window)。当我关闭第二个 window 时,程序确实终止了。如果我 运行 程序正常,第二个 window 不会出现,但我怀疑它可能已经创建并被隐藏,这就是阻止程序关闭的原因。如何让我的程序正常终止?
注意:示例代码使用的 Geopackage 文件是通过在 https://gadm.org/download_country_v3.html 上选择 'United Kingdom' 然后单击 'Geopackage' link.
下载的你不需要这条线:
matplotlib.use('WXAgg')
通过删除它,您的代码应该按预期运行(通过在 wx.Frame
上显示英国地图并在关闭此 window 时正确返回)。
请参阅有关 Embedding Matplotlib in graphical user interfaces 的 matplotlib 画廊,其中有一些使用 wxPython 的代码示例(也不使用 matplotlib.use
)。
(在 Python 3.6
、wx 4.0.1
和 matplotlib 2.2.3
上测试)