【问题标题】:tkinter: why images are not dysplayed correctlytkinter:为什么图像无法正确显示
【发布时间】:2014-12-10 07:40:31
【问题描述】:

代码:

from tkinter import *

root = Tk()

f1=Frame(root)
for img,rlf in [ ('woman',RAISED),('mensetmanus',SOLID),
    ('terminal',SUNKEN), ('escherknot',FLAT),
    ('calculator',GROOVE),('letters',RIDGE)]:
        filename = img + ".gif"
        img1 = PhotoImage(file= filename)
        Label(f1, image = img1, relief=rlf).pack(side=LEFT,
            padx=5)
f1.pack()

root.mainloop()

您能否帮助我理解为什么这段摘录会产生 5 个空白位置的图像(尽管边界是根据意思正确绘制的)和 1 个图像。最后一个图像(可见)是字母。它似乎比它的实际大小被裁剪。我的 letters.gif 包含从 A 到 G 的字母,但此代码仅显示从 B 到 F 的一半。

【问题讨论】:

    标签: python python-3.x tkinter


    【解决方案1】:

    我认为它不起作用,因为 img1 在每个循环中都会被覆盖。您需要在某处保留对图像对象的引用,以便垃圾收集器不会丢弃它们:

    from tkinter import *
    
    root = Tk()
    
    f1=Frame(root)
    img_list = []                  #<-- store references to images
    for img,rlf in [ ('woman',RAISED),('mensetmanus',SOLID),
        ('terminal',SUNKEN), ('escherknot',FLAT),
        ('calculator',GROOVE),('letters',RIDGE)]:
            filename = img + ".gif"
            img1 = PhotoImage(file= filename)
            img_list.append(img1) #<-- store references to images
            Label(f1, image = img1, relief=rlf).pack(side=LEFT,
                padx=5)
    f1.pack()
    
    root.mainloop()
    

    【讨论】:

    • 好了,图像已经开始显示了。但最后一张图像仍然被裁剪。也许结果是整个画面都达到了屏幕限制?如果我从列表中间删除一张图片,则一切正常。
    • 酷。也许是因为你的解脱?我不知道为什么它被裁剪,没有实际看到发生了什么。
    • 不,我刚刚删除了有关救济的任何内容。同种作物。但是整个边框的宽度却完美的贴合了屏幕。最后一张图片居中并被裁剪。
    • 也许会提出新问题,并提供截图发生了什么。
    猜你喜欢
    • 2017-10-13
    • 2020-08-29
    • 2016-06-29
    • 1970-01-01
    • 1970-01-01
    • 2018-10-10
    • 1970-01-01
    • 1970-01-01
    • 2019-12-10
    相关资源
    最近更新 更多