class ProgressDialog(Pmw.Dialog): def __init__(self, parent=None, **args): th = args.pop('toplevel_height', 200) tw = args.pop('toplevel_width', 400) ac = args.pop('activatecommand', None) self.no_bar = args.pop('nobar', False) Pmw.Dialog.__init__(self, parent, buttons=[], activatecommand = ac) self.component('hull').overrideredirect(1) w = self.interior() w.pack_propagate(0) w.configure(bd=5, relief='raised', height=th, width=tw) self.text = args.pop('text', 'Progress bar') self.text_var = Tkinter.StringVar() self.text_var.set(self.text) Tkinter.Label(w, textvariable=self.text_var).pack(fill='y', expand=1) if not self.no_bar: self.pb = ProgressBar(w, **args) self.pb.pack(side='top', expand=1, anchor='n') self.counter = 0 self.pb.updateProgress(self.counter) def incr(self): self.counter += 1 self.pb.updateProgress(self.counter) def set(self, value, max=None): self.counter = value self.pb.updateProgress(self.counter, max) def message(self, text): self.text = text self.text_var.set(self.text)
def main(): # Declaring main window. window = tk.Tk(className="Main Window") # Display box. ------------------------------------ display_frame = tk.Frame(window) display_frame.pack(side=tk.RIGHT) # Video + panel widget. video = VideoTk("test.mp4") img = video.get_curr() img = ImageTk.PhotoImage(img) panel = tk.Label(display_frame, image=img) panel.pack() # Slider buffer. print(video.n_frames) slider = tk.Scale(display_frame, length=video.shape[1], sliderlength=video.shape[1]/video.n_frames, orient=tk.HORIZONTAL, from_=0, to=video.n_frames - 1) slider.pack() # Progress bar widget. progress_bar = ProgressBar( display_frame, 20, video.shape[1], video.n_frames) progress_bar.pack() # Options box. ------------------------------------ options_frame = tk.Frame(window, width=100, bg="red") options_frame.pack(side=tk.LEFT, fill=tk.BOTH) # Binding callbacks. panel.bind("<Button-1>", lambda event, video=video, panel=panel, root=window, progress_bar=progress_bar, slider=slider: display.lclick_pressed(event, video, panel, root, progress_bar, slider)) panel.bind("<ButtonRelease-1>", lambda event, progress_bar=progress_bar: display.lclick_released(event, progress_bar)) panel.bind("<MouseWheel>", lambda event, video=video, panel=panel, slider=slider, n_frames_skip=5: display.scrolled(event, video, panel, slider, n_frames_skip)) slider.bind("<ButtonRelease-1>", lambda event, video=video, panel=panel, slider=slider: display.dragged_slider(event, video, panel, slider)) # Start main loop. window.mainloop()