首頁 >後端開發 >Python教學 >為什麼在類別方法中建立 Tkinter 映像時會消失?

為什麼在類別方法中建立 Tkinter 映像時會消失?

Susan Sarandon
Susan Sarandon原創
2024-12-22 06:27:20973瀏覽

Why Do Tkinter Images Disappear When Created Within Class Methods?

了解 Tkinter 影像可見性問題

Tkinter 是一個流行的 Python GUI 函式庫,在函數中建立時偶爾會遇到顯示影像的問題。此行為源自於 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 表示對影像的引用。在類別方法中,此引用會遺失,因為執行方法後照片超出範圍。

要解決此問題,請在類別實例中保存對照片的持久引用:

import tkinter

class Test:
    def __init__(self, master):
        canvas = tkinter.Canvas(master)
        canvas.grid(row = 0, column = 0)
        self.photo = tkinter.PhotoImage(file = './test.gif')
        canvas.create_image(0, 0, image=self.photo)

root = tkinter.Tk()
test = Test(root)
root.mainloop()

透過將引用儲存在self.photo 中,它在類別實例的生命週期內持續存在,確保影像保持可見。

以上是為什麼在類別方法中建立 Tkinter 映像時會消失?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn