wxpython + matplotlib:关闭数字挂起python

时间:2013-04-10 15:27:44

标签: python matplotlib wxpython

这个python程序在wxpython窗口中绘制一个图形。它在Enthought Python Distribution 7.3-2中运行良好,但是当我关闭图形时,python继续运行并且不会退出。

我错过了什么?当我创建不使用matplotlib的wxpython GUI时,它会在我关闭窗口后正确退出。我想wxpython中必定存在一些我不理解的消息循环。

# adapted from:
# http://wiki.wxpython.org/Getting%20Started
# http://www.cs.colorado.edu/~kena/classes/5448/s11/presentations/pearse.pdf

import wx
import pylab as pl
import matplotlib
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas

class GUIPanel(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)
        self.parent = parent

        # create some sizers
        sizer = wx.BoxSizer(wx.VERTICAL)

        # A button
        self.button =wx.Button(self, label="Tada!")
        self.Bind(wx.EVT_BUTTON, self.OnClick,self.button)

        # put up a figure
        self.figure = pl.figure()
        self.axes = self.drawplot(self.figure)
        self.canvas = FigureCanvas(self, -1, self.figure)

        sizer.Add(self.canvas, 0, wx.ALIGN_CENTER|wx.ALL)
        sizer.Add(self.button, 0, wx.ALIGN_CENTER|wx.ALL)

        self.SetSizerAndFit(sizer)  
    def log(self, fmt, *args):
        print (fmt % args)
    def OnClick(self,event):
        self.log("button clicked, id#%d\n", event.GetId())
    def drawplot(self, fig):
        ax = fig.add_subplot(1,1,1)
        t = pl.arange(0,1,0.001)
        ax.plot(t,t*t)
        ax.grid()
        return ax

app = wx.App(False)
frame = wx.Frame(None)
panel = GUIPanel(frame)
frame.Fit()
frame.Center()
frame.Show()
app.MainLoop()

1 个答案:

答案 0 :(得分:0)

咦。根据tcaswell的评论中的讨论,我改变了

self.figure = pl.figure()

self.figure = matplotlib.figure.Figure()

它解决了这个问题。 (当我关闭窗口时,python退出)