Source code for kalmus.tkinter_windows.meta_info_windows.MetaInfoWindow

""" MetaInfoWindow Class """

import tkinter
from kalmus.tkinter_windows.meta_info_windows.SpecifyMetaDataWindow import SpecifyMetaDataWindow
from kalmus.tkinter_windows.gui_utils import resource_path

keys = ["Film Title", "Directors", "Country of Origin", "Produced Year", "Genre"]


[docs]class MetaInfoWindow(): """ MetaInfoWindow Class GUI window that displays the meta information of the selected barcode """ def __init__(self, barcode, barcodes_stack): """ Initialize :param barcode: The barcode to check with the meta information :param barcodes_stack: The dictionary that store all the barcodes on the memory """ self.barcode = barcode self.barcodes_stack = barcodes_stack # Initialize the window self.window = tkinter.Tk() self.window.wm_title("Barcode Meta Information") self.window.iconbitmap(resource_path("kalmus_icon.ico")) # Label prompt for the meta information display self.meta_info_label = tkinter.Label(self.window, text="", width=35, bg='white', anchor='w', justify=tkinter.LEFT) self.meta_info_label.grid(row=0, column=0, columnspan=2, sticky=tkinter.W) # Update the Meta information text self.refresh_text() # Button to refresh the displayed meta information of the barcode self.refresh_button = tkinter.Button(master=self.window, text="Refresh", command=self.refresh_text) self.refresh_button.grid(row=1, column=0) # Button to add/update meta information to the barcode self.add_info_button = tkinter.Button(master=self.window, text="Update Meta Info", command=self.update_meta_info) self.add_info_button.grid(row=1, column=1)
[docs] def refresh_text(self): """ Refresh the meta information text displayed for the barcode """ meta_text = "Meta Information of the Barcode:\n" # Build the text using the keys and their values stored in the barcodes's meta information dictionary if self.barcode.meta_data is not None: for key in keys: if key in self.barcode.meta_data.keys(): format_string = "{: <s} {:s}\n".format(str(key) + ":", str(self.barcode.meta_data[key])) meta_text += format_string film_length, start_time, end_time = self.get_time_str() fps = self.barcode.fps meta_text += "\n{: <s} {:s}\n{: <s} {:s}\n{: <s} {:s}\n\n{: <s} {:.1f}"\ .format("Film Length:", film_length, "Barcode starts at", start_time, "Barcode ends at", end_time, "Frame rate (FPS):", fps) self.meta_info_label["text"] = meta_text
[docs] def get_time_str(self): """ Get string for film length in hrs:mins:secs, clip start time in hrs:mins:secs, and clip end time in hrs:mins:secs :return: Text string for film length, clip start time at film, clip end time at film """ if self.barcode.fps is None: self.barcode.fps = 30 film_length_in_secs = round(self.barcode.film_length_in_frames / self.barcode.fps) hrs, mins, secs = self.get_hr_min_sec_from_tot_sec(film_length_in_secs) film_length_str = "{:02d}:{:02d}:{:02d}".format(hrs, mins, secs) barcode_clip_length_secs = round(self.barcode.total_frames * (self.barcode.sampled_frame_rate / self.barcode.fps)) clip_start_time_secs = round(self.barcode.skip_over / self.barcode.fps) hrs, mins, secs = self.get_hr_min_sec_from_tot_sec(clip_start_time_secs) clip_start_time_str = "{:02d}:{:02d}:{:02d}".format(hrs, mins, secs) clip_end_time_secs = clip_start_time_secs + barcode_clip_length_secs hrs, mins, secs = self.get_hr_min_sec_from_tot_sec(clip_end_time_secs) clip_end_time_str = "{:02d}:{:02d}:{:02d}".format(hrs, mins, secs) return film_length_str, clip_start_time_str, clip_end_time_str
[docs] def get_hr_min_sec_from_tot_sec(self, tot_seconds): """ Get the equivalent Hours:Minutes:Seconds representation from a given total seconds :param tot_seconds: Total seconds :return: Converted hours, minutes, and seconds representation Hours:Minutes:Seconds \ Hours >= 0, 60 > Minutes >= 0, 60 > Seconds >= 0 """ secs = tot_seconds % 60 mins = int(tot_seconds / 60) % 60 hrs = int(tot_seconds / 3600) % 60 return hrs, mins, secs
[docs] def update_meta_info(self): """ Instantiate the SpecifyMetaDataWindow, if the user press the add info button """ SpecifyMetaDataWindow(self.barcode.__dict__["meta_data"], barcode=self.barcode, barcode_stacks=self.barcodes_stack)