首页 > 后端开发 > Python教程 > 为什么在类方法中创建 Tkinter 图像时会消失?

为什么在类方法中创建 Tkinter 图像时会消失?

Susan Sarandon
发布: 2024-12-22 06:27:20
原创
970 人浏览过

Why Do Tkinter Images Disappear When Created Within Class Methods?

了解 Tkinter 图像可见性问题

Tkinter 是一个流行的 Python GUI 库,在函数中创建时偶尔会遇到显示图像的问题。此行为源于 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 表示对图像的引用。在类方法中,此引用会丢失,因为执行方法后照片超出范围。

要解决此问题,请在类实例中保存对照片的持久引用:

import tkinter

class Test:
    def __init__(self, master):
        canvas = tkinter.Canvas(master)
        canvas.grid(row = 0, column = 0)
        self.photo = tkinter.PhotoImage(file = './test.gif')
        canvas.create_image(0, 0, image=self.photo)

root = tkinter.Tk()
test = Test(root)
root.mainloop()
登录后复制

通过将引用存储在 self.photo 中,它在类实例的生命周期内持续存在,确保图像保持可见。

以上是为什么在类方法中创建 Tkinter 图像时会消失?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板