首页 >后端开发 >Python教程 >为什么我的 Tkinter 图像没有出现在类中?

为什么我的 Tkinter 图像没有出现在类中?

Susan Sarandon
Susan Sarandon原创
2024-12-27 21:43:13885浏览

Why Doesn't My Tkinter Image Appear Inside a Class?

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn