如何获得geopandas地图出现在wxpython窗口中

问题描述 投票:0回答:1

我已经修改了一些以前在wxPython窗口中显示matplotlib图的代码,以便在wxPython窗口中显示geopandas的地图。地图会显示,但是当我关闭窗口时,应用程序不会终止。我在薄荷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调试器中的代码时,将显示另一个窗口(类似于matplotlib在交互模式下显示的窗口)。当我关闭第二个窗口时,程序确实终止。如果我正常运行该程序,则不会出现第二个窗口,但是我怀疑它可能已经创建并被隐藏了,这是阻止程序关闭的原因。如何使我的程序正常终止?

注意:示例代码使用的Geopackage文件是通过在https://gadm.org/download_country_v3.html上选择“英国”,然后单击“ Geopackage”链接下载的。

python matplotlib wxpython geopandas
1个回答
0
投票

您不需要该行:

matplotlib.use('WXAgg')

通过删除它,您的代码应表现出预期的效果(通过在wx.Frame上显示UK地图并在关闭此窗口时正确返回)。>>

请参阅有关Embedding Matplotlib in graphical user interfaces的matplotlib画廊,有一些wxPython的代码示例(也不使用matplotlib.use。]

(在Python 3.6,wx 4.0.1和matplotlib 2.2.3上测试)>

© www.soinside.com 2019 - 2024. All rights reserved.