2009-08-06 7 views
3

Il me manque quelque chose à un niveau très basique quand il s'agit de charger une image en utilisant PIL et de l'afficher dans une fenêtre créée par Tkinter. La forme la plus simple de ce que je suis en train de faire est:Comment utiliser PIL avec Tkinter?

import Tkinter as TK 
from PIL import Image, ImageTk 

im = Image.open("C:\\tinycat.jpg") 
tkIm = ImageTk.PhotoImage(im) 
tkIm.pack() 
TK.mainloop() 

Lorsque je tente d'exécuter le code ci-dessus, je reçois les suivantes:

RuntimeError: Too early to create image 
Exception AttributeError: "PhotoImage instance has no attribute 
'_PhotoImage__photo'" in <bound method PhotoImage.__del__ of 
<PIL.ImageTk.PhotoImage instance at 0x00C00030>> ignored 

J'ai confirmé le fichier est présent et peut être ouvert dans un éditeur d'image et aussi qu'il peut être affiché en utilisant im.show(). Qu'est-ce que je rate?

+0

duplication possible de [Erreur Tkinter Python, "Trop tôt pour créer une image"] (http://stackoverflow.com/questions/10236857/python-tkinter-error-too-early-to-create-image) –

Répondre

6

Tkinter doit être instancié avant d'appeler ImageTk.PhotoImage():

TK.Tk() 
-1

Il est très vrai ce que Meredith a dit que vous devez ajouter cette ligne à coup sûr!

Je voudrais vous montrer ma mise en forme d'image, puis le comparer à la vôtre et voir s'il y a une autre, mon code pour une image est

master.image = PhotoImage(file="Banditlogo.gif") 
w = Label(master, image=master.image) 
w.photo = master 
w.pack() 

Et votre code est

im = Image.open("C:\\tinycat.jpg") 
tkIm = ImageTk.PhotoImage(im) 
tkIm.pack() 

Nous utilisons tous les deux PIL avec PhotoImage Je ne peux m'empêcher de me demander si les deux façons sont correctes? À l'heure actuelle, je n'ai pas assez de connaissances pour répondre pleinement à votre question, mais il est intéressant de comparer les deux codes car ils sont différents. Je ne peux que suggérer de faire ce que je fais quand il s'agit de codes d'exemple que les gens partagent avec moi, et c'est "si le mien ne fonctionne pas, essayez le code exemple et voyez si cela corrige le code" avec ça.

Est-ce que quelqu'un avec plus de compréhension de Tkinter expliquera le fonctionnement de, Comment utiliser PIL avec Tkinter?

La connaissance est le pouvoir alors s'il vous plaît partager.

+0

@ Meredith L.Patters bonne réponse. –

Questions connexes