2015-06-09 11:26:12 -07:00
|
|
|
import Tkinter
|
|
|
|
from PIL import ImageTk, Image
|
2015-06-09 11:51:40 -07:00
|
|
|
import itertools as it
|
|
|
|
import time
|
2015-06-09 11:26:12 -07:00
|
|
|
|
2015-10-27 21:00:50 -07:00
|
|
|
|
2015-06-09 11:26:12 -07:00
|
|
|
class TkSceneRoot(Tkinter.Tk):
|
|
|
|
def __init__(self, scene):
|
2017-05-09 14:19:40 -07:00
|
|
|
if scene.saved_frames == []:
|
2015-10-12 19:39:46 -07:00
|
|
|
raise Exception(str(scene) + " has no frames!")
|
2015-06-09 11:26:12 -07:00
|
|
|
Tkinter.Tk.__init__(self)
|
|
|
|
|
2016-02-27 13:33:46 -08:00
|
|
|
kwargs = {
|
2016-02-27 16:29:11 -08:00
|
|
|
"height" : scene.camera.pixel_shape[0],
|
|
|
|
"width" : scene.camera.pixel_shape[1],
|
2016-02-27 13:33:46 -08:00
|
|
|
}
|
2015-06-09 11:26:12 -07:00
|
|
|
self.frame = Tkinter.Frame(self, **kwargs)
|
|
|
|
self.frame.pack()
|
|
|
|
self.canvas = Tkinter.Canvas(self.frame, **kwargs)
|
|
|
|
self.canvas.configure(background='black')
|
2016-11-15 20:08:28 -08:00
|
|
|
self.canvas.place(x=0, y=0)
|
2015-06-09 11:26:12 -07:00
|
|
|
|
2015-06-09 11:51:40 -07:00
|
|
|
last_time = time.time()
|
2017-05-09 14:19:40 -07:00
|
|
|
for frame in it.cycle(scene.saved_frames):
|
2016-11-15 20:08:28 -08:00
|
|
|
# try:
|
|
|
|
# self.show_new_image(frame)
|
|
|
|
# except:
|
|
|
|
# break
|
|
|
|
self.show_new_image(frame)
|
2015-06-10 22:00:35 -07:00
|
|
|
sleep_time = scene.frame_duration
|
2015-06-09 11:51:40 -07:00
|
|
|
sleep_time -= time.time() - last_time
|
|
|
|
time.sleep(max(0, sleep_time))
|
|
|
|
last_time = time.time()
|
2015-06-09 11:26:12 -07:00
|
|
|
self.mainloop()
|
|
|
|
|
2015-06-09 11:51:40 -07:00
|
|
|
def show_new_image(self, frame):
|
2017-09-26 17:41:45 -07:00
|
|
|
image = Image.fromarray(frame.astype('uint8')).convert('RGB')
|
2015-06-09 11:26:12 -07:00
|
|
|
photo = ImageTk.PhotoImage(image)
|
|
|
|
self.canvas.delete(Tkinter.ALL)
|
|
|
|
self.canvas.create_image(
|
|
|
|
0, 0,
|
|
|
|
image = photo, anchor = Tkinter.NW
|
|
|
|
)
|
|
|
|
self.update()
|