import tkinter as tk
import tkinter.filedialog
from PIL import Image, ImageOps, ImageTk
import lumen_profiler
class GuiApp:
def __init__(self):
self.tkroot = tk.Tk()
self.lp = lumen_profiler.LumenProfiler()
def make_window(self):
self.tkroot.title("Lumen Profiler")
self.tkroot.geometry("800x600")
self.top_frame = tk.Frame(self.tkroot)
self.top_frame.pack(fill=tk.X)
self.file_button = tk.Button(
self.top_frame, text="映像ファイルを開く", command=self.open_movie
)
self.file_button.pack(side=tk.LEFT)
self.file_text = tk.Label(self.top_frame, text="no movie")
self.file_text.pack(side=tk.LEFT, fill=tk.X)
self.canvas = tk.Canvas(self.tkroot)
self.canvas.pack(fill=tk.BOTH, expand=True)
self.time_slider = tk.Scale(
self.tkroot,
from_=0,
to=0,
orient=tk.HORIZONTAL,
command=self.on_time_slider_change,
)
self.time_slider.pack(fill=tk.X)
self.tkroot.mainloop()
def open_movie(self):
filename = tk.filedialog.askopenfilename(filetypes=[("mp4", "*.mp4")])
if filename == "": # cancel
return
self.lp.load_movie(filename)
self.file_text.config(text=filename)
self.time_slider.set(0)
self.time_slider.config(to=self.lp.frame_count - 1)
self.show_image(self.lp.frames[0])
def on_time_slider_change(self, event):
rid = self.time_slider.get()
self.show_image(self.lp.frames[rid])
def show_image(self, img):
pil = Image.fromarray(self.lp.bgr2rgb(img))
pil = ImageOps.pad(pil, (self.canvas.winfo_width(), self.canvas.winfo_height()))
self.disp = ImageTk.PhotoImage(pil)
# self.canvas.delete("all")
self.canvas.create_image(0, 0, image=self.disp, anchor=tk.NW)
# main
if __name__ == "__main__":
app = GuiApp()
app.make_window()