Tkinter 影像在類別中無法使用
在 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 變數是類別建構子中的局部變數。一旦建構函數完成,變數就會被垃圾收集器丟棄。為了確保影像保持可見,對照片變數的引用必須儲存在類別中。這可以透過將程式碼修改為:
class Test: def __init__(self, master): self.canvas = tkinter.Canvas(master) self.canvas.grid(row=0, column=0) self.photo = tkinter.PhotoImage(file='./test.gif') self.canvas.create_image(0, 0, image=self.photo) root = tkinter.Tk() test = Test(root) root.mainloop()
透過將 photo 變數指派給 self.photo 來實現,即使在建構函式完成後,也會保留對影像的參考。這允許圖像在類別中顯示。
搜尋Tkinter 影像問題
如果您遇到Tkinter 影像未出現的類似問題,請記住搜尋相關文件或論壇主題可以提供有關原因和解決方案的寶貴見解。透過了解變數的範圍以及如何維護引用,您可以在 Tkinter 應用程式中有效地顯示影像。
以上是為什麼我的 Tkinter 影像沒有出現在類別中?的詳細內容。更多資訊請關注PHP中文網其他相關文章!