Python PIL ImageTk.PhotoImage() me donne une erreur de bus?
Donc, je suis en cours d'exécution python 2.6 sur un macbook pro et d'essayer d'écrire le code en python pour afficher une image à partir d'un fichier dans une étiquette sur une interface graphique tkinter. L'image est appelée image.png. Le programme s'exécute sans erreur lorsque j'utilise ce code
i = Image.open("image.png")
mais quand je fais ce code (j'ai ajouter une ligne):
i = Image.open("image.png")
photo = ImageTk.PhotoImage(i)
Le programme va se planter et de se dire "Bus error" dans la ligne de commande. Je ne sais même pas ce que cela signifie. Je pense que la LIP est installé correctement, car l'Image fonctionne, mais le fait que ImageTk ne fonctionne pas me énigmes. Quelqu'un peut-il me dire ce qui pourrait être la cause de cette erreur de Bus?
EDIT:
Bien j'ai fait un nouveau programme de test de l'erreur de poursuite. Ici est exactement le scénario que j'ai couru:
import Image
import ImageTk
i = Image.open("image.png")
photo = ImageTk.PhotoImage(i)
Maintenant, au lieu de "Bus error", c'est mon traceback.
Traceback (most recent call last):
File "imageTest.py", line 5, in <module>
photo = ImageTk.PhotoImage(i)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/PIL/ImageTk.py", line 113, in __init__
self.__photo = apply(Tkinter.PhotoImage, (), kw)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-tk/Tkinter.py", line 3285, in __init__
Image.__init__(self, 'photo', name, cnf, master, **kw)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-tk/Tkinter.py", line 3226, in __init__
raise RuntimeError, 'Too early to create image'
RuntimeError: Too early to create image
Exception AttributeError: "PhotoImage instance has no attribute '_PhotoImage__photo'" in <bound method PhotoImage.__del__ of <ImageTk.PhotoImage instance at 0x3c7a30>> ignored
OriginalL'auteur Dylan | 2010-07-05
Vous devez vous connecter pour publier un commentaire.
Je ne sais pas à propos de l'Erreur de Bus, mais vous avez besoin pour créer une fenêtre Tk avant que vous pouvez appeler PhotoImage. Ce script fonctionne pour moi-
Ce poste peut être pertinent-bytes.com/topic/python/answers/... la version de OSX êtes-vous en cours d'exécution? Le code ci-dessus a fonctionné pour moi en Python 2.6 et OS 10.6
Je suis en cours d'exécution 10.6 et version 2.6 de Python aussi. Ce post ressemble, il peut être utile, donc je vais le regarder. Merci
Bon, eh bien je crois que j'ai trouvé ce qui serait la solution à mon problème, si je savais comment faire. Je me sentais comme il y a autant de contenu que ce justifié une deuxième question, donc, pourriez-vous s'il vous plaît regardez ici et dites-moi si vous savez comment faire ce qu'il me dit? stackoverflow.com/questions/3200308/...
OriginalL'auteur Rob Lourens
ImageTk.PhotoImage a un garbage collection (réf comte) bug. Vous devez placer une référence à la PhotoImage objet dans une variable globale d'une variable d'instance de classe (par exemple, l'auto.myphoto = ImageTk.PhotoImage(i)).
Voir cet avertissement:
http://infohost.nmt.edu/tcc/help/pubs/pil/image-tk.html
OriginalL'auteur mckoss
Même pensé que vous avez besoin pour appeler une fenêtre Tk vous devez également définir le répertoire de sorte qu'il peut trouver de l'image.png.
OriginalL'auteur jcham55