Rumah > pembangunan bahagian belakang > Tutorial Python > Mengapa Imej Tkinter Hilang Apabila Dicipta Dalam Kaedah Kelas?

Mengapa Imej Tkinter Hilang Apabila Dicipta Dalam Kaedah Kelas?

Susan Sarandon
Lepaskan: 2024-12-22 06:27:20
asal
1029 orang telah melayarinya

Why Do Tkinter Images Disappear When Created Within Class Methods?

Memahami Isu Keterlihatan Imej Tkinter

Tkinter, perpustakaan GUI yang popular untuk Python, kadangkala menghadapi masalah dengan memaparkan imej apabila dibuat dalam fungsi. Tingkah laku ini berpunca daripada cara Tkinter mengendalikan pembolehubah setempat seperti rujukan imej.

Cabaran

Pertimbangkan kod berikut yang berjaya memaparkan imej:

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()
Salin selepas log masuk

Walau bagaimanapun, apabila mencipta imej dalam kaedah kelas, imej itu hilang.

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()
Salin selepas log masuk

The Penyelesaian

Isu timbul kerana foto pembolehubah setempat mewakili rujukan kepada imej. Dalam kaedah kelas, rujukan ini hilang kerana foto di luar skop selepas kaedah dilaksanakan.

Untuk menyelesaikan masalah ini, simpan rujukan berterusan kepada foto dalam contoh kelas:

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()
Salin selepas log masuk

Dengan menyimpan rujukan dalam self.photo, ia berterusan sepanjang hayat contoh kelas, memastikan imej kekal kelihatan.

Atas ialah kandungan terperinci Mengapa Imej Tkinter Hilang Apabila Dicipta Dalam Kaedah Kelas?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan