我做了這段代碼:from tkinter import *from PIL import ImageTk, Imageimport sysimport getnewclass 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()關(guān)鍵是有 3 個(gè)圖像,當(dāng)點(diǎn)擊時(shí),執(zhí)行一個(gè)函數(shù),但他的圖像不顯示。它們確實(shí)顯示為大小和“可點(diǎn)擊”區(qū)域,并且它們執(zhí)行該功能,但未顯示原樣的圖像。我在這里做錯(cuò)了什么?
1 回答

MM們
TA貢獻(xiàn)1886條經(jīng)驗(yàn) 獲得超2個(gè)贊
從Tkinter的文檔上PhotoImage
:
您必須在 Python 程序中保留對(duì)圖像對(duì)象的引用,方法是將其存儲(chǔ)在全局變量中,或?qū)⑵涓郊拥搅硪粋€(gè)對(duì)象。
這樣做的原因是:
當(dāng) Python 對(duì) PhotoImage 對(duì)象進(jìn)行垃圾收集時(shí)(例如,當(dāng)您從將圖像存儲(chǔ)在局部變量中的函數(shù)返回時(shí)),即使 Tkinter 小部件顯示該圖像,也會(huì)清除該圖像。
為了避免這種情況,程序必須保留對(duì)圖像對(duì)象的額外引用。一種簡(jiǎn)單的方法是將圖像分配給小部件屬性。
因此對(duì)于您的程序:
img1 = ImageTk.PhotoImage(Image.open("images/ss.png"))
cercaImg = Label(master, image = img1)
cercaImg.image = img1 # Keep a reference
其他圖像也是如此。
添加回答
舉報(bào)
0/150
提交
取消