【发布时间】: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