声明FigureCanvasTkAgg引起内存

2024-10-03 21:24:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我很难弄清楚FigureCanvasTkAgg的声明会导致内存泄漏,在我的类__init__方法中有以下几行:

   # pndwinBottom is a paned window of the main screen
   self.__drawplotFrame = Frame(pndwinBottom, width=WIDTH, height=HEIGHT)                                 # the frame on which we will add our canvas for drawing etc.

   self.__fig = plt.figure(figsize=(16,11))
   self.__drawplotCanvas = FigureCanvasTkAgg(self.__fig, master=self.__drawplotFrame)

问题是,在运行应用程序并退出时,python32.exe仍保留在我的进程窗口中,并将阻塞我的计算机。但是,注释掉这三行代码将允许我的应用程序退出,进程将正确终止。这些行会对我的应用程序做些什么来阻止进程在应用程序完成后结束?谢谢

编辑


内存泄漏似乎只由self.__fig = plt.figure(figsize=(16, 11))行引起。我需要在离开前用plt来解构吗?在


Tags: the方法内存self应用程序声明进程init
2条回答

我遇到了内存泄漏的问题,我想我找到了解决办法。在我的方法中,我创建了一个框架,然后将其传递给一个绘图函数来完成实际的工作。在这个函数中,我将创建一个新的matplotlib.figure.figure实例,由于某种原因,当函数超出作用域时,它没有被销毁。在

为了解决这个问题,我做了这样的事情:在UuInit_uUu方法中,我不仅创建了框架,还创建了图形(包括轴)和画布:

    results = tk.Frame(self)
    f = Figure()
    ax0 = f.add_subplot(211)
    ax1 = f.add_subplot(212)
    self.canvas = FigureCanvasTkAgg(f, results)
    self.canvas.get_tk_widget().pack(expand=True, fill='both')

然后,在绘图方法中

^{pr2}$

就这样,漏洞消失了!在

我想这不会是因为我把窗户关上了 如embedding in tk example尝试使用Figure

from matplotlib.figure import Figure

self.__fig = Figure(figsize=(16,11))

示例用法:

^{pr2}$

相关问题 更多 >