【问题标题】:How to get a geopandas map to appear in a wxpython window如何让 geopandas 地图出现在 wxpython 窗口中
【发布时间】:2019-12-17 10:18:06
【问题描述】:

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

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

【问题讨论】:

    标签: python matplotlib wxpython geopandas


    【解决方案1】:

    你不需要这条线:

    matplotlib.use('WXAgg')
    

    删除它后,您的代码应该会按预期运行(通过在wx.Frame 上显示英国地图并在关闭此窗口时正确返回)。

    查看关于Embedding Matplotlib in graphical user interfaces 的matplotlib 库,有一些使用wxPython 的代码示例(也没有使用matplotlib.use)。

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

    【讨论】:

      猜你喜欢
      • 2011-09-17
      • 1970-01-01
      • 1970-01-01
      • 2022-08-12
      • 1970-01-01
      • 1970-01-01
      • 2011-11-29
      • 2012-06-11
      • 2017-07-06
      相关资源
      最近更新 更多