2010-06-16 7 views
0

J'essaie d'attraper une capture d'écran toutes les 30 secondes et de l'afficher sur mon interface graphique, ce que j'ai jusqu'ici.Tkinter utilisant une image non-enregistrée comme une image

code:

from Tkinter import * 
from PIL import ImageGrab 

window = Tk() 

box = (100,100,400,400) 
MyImage = ImageGrab.grab(box) 

MyPhotoImage = PhotoImage(file=MyImage) #I know this is where its going wrong, just not sure how to fix it 
PictureLabel = Label(window, image=MyPhotoImage) 
PictureLabel.pack() 

window.mainloop() 

Python ne marche pas comme le fait que je ne l'ai pas enregistré l'image, est-il un moyen possible de le faire sans enregistrer l'image (pas beaucoup d'intérêt depuis son être renouvelée toutes les 30 secondes)

Ce n'est pas non plus une sauvegarde toutes les 30 secondes, y a-t-il un moyen simple de le faire sans que le programme ne soit suspendu? Comme je pourrais juste utiliser un time.sleep (30) mais le programme gèle juste pendant 30 secondes prendre une photo puis geler à nouveau.

Merci :)

Répondre

0

Vous devriez pouvoir utiliser StringIO pour cela:

import cStringIO 
fp = cStringIO.StringIO() 
MyImage.save(fp,'GIF') 
MyPhotoImage = PhotoImage(data=fp.getvalue()) 

Permet de modifier

On dirait que je devrais lire les documents un peu plus près. Les données de PhotoImage doivent être codées à base64

from Tkinter import * 
from PIL import ImageGrab 
import cStringIO, base64 

window = Tk() 

box = (100,100,500,500) 
MyImage = ImageGrab.grab(box) 

fp = cStringIO.StringIO() 
MyImage.save(fp,'GIF')  

MyPhotoImage = PhotoImage(data=base64.encodestring(fp.getvalue())) 
PictureLabel = Label(image=MyPhotoImage) 
PictureLabel.pack() 
PictureLabel.image = MyPhotoImage 

window.mainloop() 
+0

Essayé cela et cela fonctionne sans erreurs, mais theres aucune image montrant. Toujours bricoler pour trouver le problème. –

+0

Voir les modifications ci-dessus. – Mark

+0

impressionnant cela a fonctionné, merci pour l'aide :) –

0

images tk acceptent une option "data", qui vous permet de spécifier des données d'image codées en base64. En outre, PIL vous donne des moyens de copier et coller des données d'image. Il devrait être possible de copier les données de MyImage vers MyPhotoImage. Avez-vous essayé cela?

+0

Pas tout à fait sûr de ce que vous voulez dire, comment exactement devrais-je copier les données de MyImage à MyPhotoImage. J'ai juste essayé "MyPhotoImage = PhotoImage (copy = MyImage)", mais cela n'a pas fonctionné. –

Questions connexes