繁体   English   中英

Tkinter图像未显示

[英]Tkinter image not showing

我编写了这段代码:

from tkinter import *
from PIL import ImageTk, Image
import sys
import getnew


class startUp:
    def __init__(self, master):
        master.title("Tag checker")
        master.resizable(False, False)


        img1 = ImageTk.PhotoImage(Image.open("images/ss.png"))
        cercaImg = Label(master, image = img1)
        cercaImg.bind("<Button-1>",clicka)
        cercaImg.grid(row=0,column=0)


        img2 = ImageTk.PhotoImage(Image.open("images/opz.png"))
        opzioniImg = Label(master, image = img2)
        opzioniImg.grid(row=0,column=1)


        img3 = ImageTk.PhotoImage(Image.open("images/exit.png"))
        esciImg = Label(master, image = img3)
        esciImg.bind("<Button-1>",(master.destroy and quit))
        esciImg.grid(row=0,column=2)

def clicka(event):
    print('ciaooo')
    x = getnew.getSchools()
    print(x[0][0],x[0][1],x[0][2])


root = Tk()
st = startUp(root)
root.mainloop()

关键是要有3张图像,单击这些图像可以执行功能,但是这些图像没有显示。 它们的确显示为大小和“可单击”区域,并且它们执行该功能,但没有显示图像。

我在这里做错了什么?

来自PhotoImage上的PhotoImage 文档

您必须在Python程序中保留对图像对象的引用,方法是将其存储在全局变量中,或者将其附加到另一个对象。

这样做的原因是:

当PhotoImage对象被Python垃圾收集时(例如,当您从将图像存储在局部变量中的函数返回时),即使Tkinter小部件正在显示该图像,也会清除该图像。

为了避免这种情况,程序必须保留对图像对象的额外引用。 一种简单的方法是将图像分配给小部件属性。

因此,对于您的程序:

img1 = ImageTk.PhotoImage(Image.open("images/ss.png"))
cercaImg = Label(master, image = img1)
cercaImg.image = img1 # Keep a reference

其他图像也是如此。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM