Python Tkinter使用未保存的图片作为图像

Python Tkinter使用未保存的图片作为图像,python,python-imaging-library,tkinter,Python,Python Imaging Library,Tkinter,我正在尝试每30秒抓取一个屏幕截图,并将其显示在我的GUI上,以下是我到目前为止得到的结果 代码: Python不喜欢我没有保存图像的事实,有没有一种不保存图像的方法可以做到这一点(因为它每30秒更新一次,所以没什么意义) 它也不是每30秒就保存一次,有没有一种简单的方法可以在不挂起程序的情况下保存? 因为我可以使用time.sleep(30),但是程序会冻结30秒,拍一张照片,然后再冻结 谢谢:)您应该能够使用StringIO实现以下功能: import cStringIO fp = cStr

我正在尝试每30秒抓取一个屏幕截图,并将其显示在我的GUI上,以下是我到目前为止得到的结果

代码:

Python不喜欢我没有保存图像的事实,有没有一种不保存图像的方法可以做到这一点(因为它每30秒更新一次,所以没什么意义)

它也不是每30秒就保存一次,有没有一种简单的方法可以在不挂起程序的情况下保存? 因为我可以使用time.sleep(30),但是程序会冻结30秒,拍一张照片,然后再冻结


谢谢:)

您应该能够使用StringIO实现以下功能:

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

看来我应该仔细看一下这些文件。PhotoImage数据必须编码为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()

tk图像接受一个“数据”选项,该选项允许您指定以base64编码的图像数据。此外,PIL还提供了复制和粘贴图像数据的方法。应该可以将数据从MyImage复制到MyPhotoImage。你试过了吗?

不太清楚你的意思,我该如何将数据从MyImage复制到MyPhotoImage。我刚刚尝试了“MyPhotoImage=PhotoImage(copy=MyImage)”,但不起作用。尝试了这个,没有错误,但没有显示图像。仍在四处修补以找到问题。
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()