繁体   English   中英

PyQt4 / Matplotlib-如何释放内存?

[英]PyQt4 / matplotlib - how to release memory?

我正在使用matplotlib Qt4后端来绘制大量数据。

我的问题是:如何正确关闭matplotlib图并释放该图占用的内存? Figure.close()不会执行此操作,也不会关闭绘图窗口。

下面的最小工作示例显示了该问题:

import sys
from PyQt4 import QtGui

from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt4agg import NavigationToolbar2QTAgg as NavigationToolbar
import matplotlib.pyplot as plt
from numpy.random import random

class MainWindow(QtGui.QDialog):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)

        self.setGeometry(50, 50, 200, 200)

        self.bPlot = QtGui.QPushButton('Plot',self)
        self.bPlot.resize(75,25)
        self.bPlot.move(25, 25)
        self.bPlot.clicked.connect(self.bPlotHandler)

        self.bClosePlot = QtGui.QPushButton('Close plot',self)
        self.bClosePlot.resize(75,25)
        self.bClosePlot.move(25, 75)
        self.bClosePlot.clicked.connect(self.bClosePlotHandler)

        self.show()

    def bPlotHandler(self):
        self.plotApp=PlotWindow()
        self.plotApp.plot()
        self.plotApp.show()

    def bClosePlotHandler(self):
        self.plotApp.figure.clf()
        self.plotApp=None

class PlotWindow(QtGui.QDialog):
    def __init__(self, parent=None):
        super(PlotWindow, self).__init__(parent)

        self.figure = plt.figure()
        self.canvas = FigureCanvas(self.figure)

        layout = QtGui.QVBoxLayout()
        layout.addWidget(self.canvas)
        self.setLayout(layout)

    def plot(self):
        data=random(1e5)
        ax = self.figure.add_subplot(111)
        ax.plot(data)
        self.canvas.draw()

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)

    main = MainWindow()
    main.show()

    sys.exit(app.exec_())

也许您可以删除变量? 就像是

del self.figure
self.figure = None

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM