我已经修改了一些以前在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”链接下载的。
您不需要该行:
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
上测试)>