【问题标题】:Is memory allocated each time I call PhotoImage每次调用 PhotoImage 时是否分配了内存
【发布时间】:2019-05-10 12:01:31
【问题描述】:

我有一个 Tkinter GUI 程序,它根据用户提供的比例因子显示图像(大约 100 张图片)。因此我使用 PIL 来调整图像的大小,将它们一个接一个地存储在一个数组中

My_Images = []
for i in range(100)
    img = Image.open("Pic"+ str(i) + ".gif")
    Zimg = img.resize((Z.Width,Z.Height))
    Zimage = ImageTk.PhotoImage(Zimg)
    My_Images.append(Zimage)

Z.Width 和 Z.Height 由函数根据用户输入的比例因子计算得出。因此,GUI 窗口使用的画布被配置为根据用户导航输入一个接一个地显示图片(由数组引用)。

我担心的是,当我在多个基于用户的条目(缩放因子)之后打印数组内容时,从而对上述“for循环”进行多次迭代,数组 My_Images 内容的打印命令给出“ pyimage900",以及类似的如此高的数字。我想知道这是否对内存分配有任何负面影响,因为在“for loop”的第九次迭代之后,“pyimage1”-“pyimage800”对我没有用。 尽管每次启动“for循环”之前都会清除数组,但“pyimage”的数字后缀中的条目仍然不断增加。

未使用的 pyimage 对象的这种内存分配对内存有负面影响吗?是否/我可以删除它们,如何?

【问题讨论】:

  • img = Image.open(...) 行可以放在 for 循环之外(之前)。
  • 将“Zimage”记录在 My_Images 数组中的目的是什么?
  • @VikhyatAgarwal Image.open(...) 用于打开一个又一个图像,因此它在 for 循环中。
  • @VikhyatAgarwal 记录在 My_Images 数组中的 Zimage 将用于通过访问数组 inex 和分别配置画布来显示相应调整大小的图像。

标签: python-3.x user-interface tkinter tkinter-canvas


【解决方案1】:

如果你想删除像 Zimage 这样的变量,你可以使用以下行:

del Zimage

如果你想从 My_Images 数组中删除一个元素:

del My_Images[3]

【讨论】:

  • 不,我不关心删除变量,而是关心 PhotoImage 在连续迭代后返回什么(pyimage1,pyimage2......)
  • 有没有办法改变相同的 pyimage-suffix 而不是创建一个连续更新的后缀
猜你喜欢
  • 2015-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-07
  • 1970-01-01
  • 2020-07-06
  • 2016-03-04
  • 1970-01-01
相关资源
最近更新 更多