Matplotlib 关闭绘图窗口后,进程将继续运行

Matplotlib 关闭绘图窗口后,进程将继续运行,matplotlib,wxpython,Matplotlib,Wxpython,我是matplotlib的新手,有一些困难时期。从用户的角度来看,一切都很好。 我有一个带按钮的窗口。按下按钮,将弹出一个显示绘图的新窗口。赛后 用它我点击X关闭这个窗口。然后再次单击X以使用按钮关闭窗口。 但我没有回到一个免费的提示。主窗口已锁定,仍在后台运行 下面是代码的重要部分: import matplotlib import matplotlib.pyplot as Plt from matplotlib.figure import Figure class MainPanel(wx

我是matplotlib的新手,有一些困难时期。从用户的角度来看,一切都很好。 我有一个带按钮的窗口。按下按钮,将弹出一个显示绘图的新窗口。赛后 用它我点击X关闭这个窗口。然后再次单击X以使用按钮关闭窗口。 但我没有回到一个免费的提示。主窗口已锁定,仍在后台运行

下面是代码的重要部分:

import matplotlib
import matplotlib.pyplot as Plt
from matplotlib.figure import Figure

class MainPanel(wx.Panel):

    def __init__(self, parent): #=None

        wx.Panel.__init__(self, parent)

                       .... wxpython stuff goes here....

              self.btn1.Bind(wx.EVT_BUTTON, self.cplot)

                       ....

    def cplot(self, event):
        self.new = NewWindow(self)
        self.new.cidadeplot(self)
        self.new.Show()
        return


class NewWindow(wx.Frame):

    def __init__(self,event):
        wx.Frame.__init__(self, None, -1, 'Plot', size=(556, 618))
        wx.Frame.CenterOnScreen(self)
        self.Bind(wx.EVT_CLOSE, self.OnClose)


    def OnClose(self,event):
        self.Destroy()


    def cidplot(self,event):


        self.fig = Figure()

        self.axes = self.fig.add_subplot(111)
        self.canvas = FigCanvas(self, -1, self.fig)

        self.axes.set_ylabel("Parts")
        self.axes.set_ylim(0,100)
        self.axes.grid(True)

        ....more axes settings...

       bars = self.axes.bar(left=self.ii, height=self.tt, width=0.2, align='center', alpha=0.8)

        ....

        self.canvas.draw()

        Plt.savefig("Parts.pdf", dpi=300)



class MainFrame(wx.Frame):

    def __init__(self):

        wx.Frame.__init__(self, None, title = "System Test")

        self.SetSize((556, 618))

        panel = MainPanel(self)

        self.Show()


if __name__ == "__main__":

    app = wx.App(False)
    frame = MainFrame()
    app.MainLoop()
我认为问题出在self.fig=Figure()(如果我使用Plt.Figure(),也会发生同样的情况)

当我创建新窗口或在matplotlib部件时,我做错了什么? 有更好的方法吗


提前谢谢。欢迎使用任何ideia。

不要导入
pyplot
,它有自己的包装来处理图形gui框架的管理(除了状态机界面之外),这是
pyplot
的要点。要做到这一点,它会启动自己的主循环,这可能就是把你搞砸的原因


确保查看示例

关闭时使用此功能:

def onClose(self, event):
    """"""
    self.Close(True)
他是对的

我删除了对pyplot的所有引用。savefig正在锁定应用程序。 将所有更改为self.axes.XXX和salf.fig.savefig(XXX)并工作

谢谢