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.
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()
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()
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()
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!