【发布时间】:2016-10-13 11:14:26
【问题描述】:
我正在尝试像录制一样快速截屏并显示图像。除了显示窗口偶尔会出现白框“闪烁”之外,它似乎都运行良好。它似乎不是每次更新或每隔一帧,而是每 5 次左右。对原因有什么想法吗?
from tkinter import *
from PIL import Image, ImageGrab, ImageTk
import threading
from collections import deque
from io import BytesIO
class buildFrame:
def __init__(self):
self.root = Tk()
self.land = Canvas(self.root, width=800, height=600)
self.land.pack()
self.genObj()
self.thsObj = self.land.create_image(0,0, anchor='nw', image=self.imgObj)
self.sStream = deque()
self.spinning = True
prQ = threading.Thread(target=self.procQ)
prQ.start()
t1 = threading.Thread(target=self.snapS, args=[100])
t1.start()
def genObj(self):
tmp = Image.new('RGBA', (800, 600), color=(0, 0, 0))
self.imgObj = ImageTk.PhotoImage(image=tmp)
def procQ(self):
while self.spinning == True:
if self.sStream:
self.land.itemconfig(self.thsObj, image=self.sStream[0])
self.sStream.popleft()
def snapS(self, shtCount):
quality_val = 70
for i in range(shtCount):
mem_file = BytesIO()
ImageGrab.grab().save(mem_file, format="JPEG", quality=quality_val)
mem_file.seek(0)
tmp = Image.open(mem_file)
tmp.thumbnail([800, 600])
img = ImageTk.PhotoImage(tmp)
self.sStream.append(img)
mem_file.close()
world = buildFrame()
world.root.mainloop()
【问题讨论】: