Tkinter 图像在类中不可用
在 Tkinter 中,在函数中创建图像可能会导致意外行为。虽然类外部的以下代码成功显示图像:
import tkinter root = tkinter.Tk() canvas = tkinter.Canvas(root) canvas.grid(row=0, column=0) photo = tkinter.PhotoImage(file='./test.gif') canvas.create_image(0, 0, image=photo) root.mainloop()
放置在类内的相同代码不会渲染图像:
import tkinter class Test: def __init__(self, master): canvas = tkinter.Canvas(master) canvas.grid(row=0, column=0) photo = tkinter.PhotoImage(file='./test.gif') canvas.create_image(0, 0, image=photo) root = tkinter.Tk() test = Test(root) root.mainloop()
解决方案:范围图像参考
出现此问题是因为 photo 变量是类构造函数中的局部变量。一旦构造函数完成,该变量就会被垃圾收集器丢弃。为了确保图像保持可见,对照片变量的引用必须存储在类中。这可以通过将代码修改为:
class Test: def __init__(self, master): self.canvas = tkinter.Canvas(master) self.canvas.grid(row=0, column=0) self.photo = tkinter.PhotoImage(file='./test.gif') self.canvas.create_image(0, 0, image=self.photo) root = tkinter.Tk() test = Test(root) root.mainloop()
通过将 photo 变量分配给 self.photo 来实现,即使在构造函数完成后,也会保留对图像的引用。这允许图像在类中显示。
搜索 Tkinter 图像问题
如果您遇到 Tkinter 图像未出现的类似问题,请记住搜索相关文档或论坛主题可以提供有关原因和解决方案的宝贵见解。通过了解变量的范围以及如何维护引用,您可以在 Tkinter 应用程序中有效地显示图像。
以上是为什么我的 Tkinter 图像没有出现在类中?的详细内容。更多信息请关注PHP中文网其他相关文章!