【问题标题】:Tkinter loading images in the frameTkinter 在框架中加载图像
【发布时间】:2016-01-20 07:18:17
【问题描述】:

我正在使用 Python 2.7 并想在 Tkinter 框架上加载一个 .gif 徽标,但有一个问题是它一直打开两个窗口(一个是空的,一个是带徽标的)。 代码:

import Tkinter

root = Toplevel()
logo = PhotoImage(file="D:\\.....\\....\\****.gif")
w1 = Label(root, compound = CENTER, image = logo).pack(side="right")
root.mainloop()

我的徽标怎么只有一个窗口?

【问题讨论】:

    标签: python python-2.7 tkinter


    【解决方案1】:

    每个 tkinter 应用程序都需要一个 Tk() 窗口a.k.a 根,以便其他小部件存在。如果您不显式创建它,它将被隐式创建。您的空窗口是隐式创建的Tk() 窗口,另一个是您创建的Toplevel()
    所以你需要改变这一行

    root = Toplevel()
    

    root = Tk()
    

    另外,您的image 中的please keep the reference

    当您将 PhotoImage 或其他 Image 对象添加到 Tkinter 小部件时, 您必须保留自己对图像对象的引用。如果你不这样做, 图片不会一直显示。

    问题是 Tkinter/Tk 接口不处理引用 正确地对对象进行成像; Tk 小部件将包含对 内部对象,但 Tkinter 没有。当 Python 的垃圾收集器 丢弃 Tkinter 对象,Tkinter 告诉 Tk 释放图像。 但由于图像正在被小部件使用,Tk 不会破坏它。不是 完全地。它只是使图像空白,使其完全 透明的……

    【讨论】:

    • 抱歉回答迟了。带有 Tk() 的没有鞋标。
    • @KianooshNazari 你是图片的keeping the reference 吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-07
    相关资源
    最近更新 更多