2013-05-07 60 views
22

Mã này hoạt động:Tại sao hình ảnh Tkinter không hiển thị nếu được tạo trong một hàm?

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

Nó hiển thị cho tôi hình ảnh.

Bây giờ, mã này biên dịch nhưng nó không cho tôi xem hình ảnh, và tôi không biết tại sao, bởi vì đó là cùng một mã, trong một lớp học:

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() 
+0

có thể trùng lặp của [Không thể hiển thị hình ảnh trong Tkinter] (https://stackoverflow.com/questions/3359717/cannot-display-an-image-in-tkinter) – Nae

Trả lời

34

Biến photo là một địa phương biến được thu thập rác sau khi lớp được khởi tạo. Lưu một tài liệu tham khảo cho bức ảnh, ví dụ:

self.photo = tkinter.PhotoImage(...) 

Nếu bạn thực hiện tìm kiếm của Google trên "hình ảnh Tkinter không hiển thị", kết quả đầu tiên là thế này:

http://effbot.org/pyfaq/why-do-my-tkinter-images-not-appear.htm