def __init__(self, parent, headers, buttons, border=10, edit_callback=None): super().__init__(parent) self._listbox = Table(self, headers=[str(x.value) for x in headers], callback=edit_callback) # CONTROL FRAMES button_frame = Panel(self) button_sizer = BoxSizer(HORIZONTAL) for callback, text in buttons: button_sizer.Add(SimpleButton(button_frame, text_button=text, callback=callback), flag=TOP, border=border) button_frame.SetSizer(button_sizer) # ALIGN sizer = BoxSizer(VERTICAL) sizer.Add(self._listbox, 1, EXPAND) sizer.Add(button_frame) self.SetSizer(sizer)
def construct_notebook(self): """Constructs the main Notebook panel""" panel = Panel(self) self.notebook = Notebook(panel, style=NB_LEFT) self.construct_tabs() sizer = BoxSizer(HORIZONTAL) sizer.Add(self.notebook, 1, EXPAND) panel.SetSizer(sizer)
def __init__(self, *callbacks): Frame.__init__(self, None, ID_ANY, "CUT") self.Bind(EVT_CLOSE, lambda x: self.Destroy()) root = Panel(self, EXPAND) sizer = BoxSizer(VERTICAL) elements = [] for element in callbacks: sizer.Add(element, 1, EXPAND) root.SetSizer(sizer)
def field_from_value(self, window, value, field): item = None if isinstance(value, six.string_types): item = TextCtrl(window, value=value) field.text_type = STRING_SETTING elif isinstance(value, list): if isinstance(value[0], six.string_types): item = TextCtrl(window, value=", ".join(value)) field.text_type = STRING_LIST_SETTING elif isinstance(value[0], numbers.Real): item = TextCtrl(window, value=", ".join((str(x) for x in value))) field.text_type = NUMBER_LIST_SETTING elif isinstance(value, bool): item = CheckBox(window, -1, '', (120, 75)) item.SetValue(value) elif isinstance(value, numbers.Real): item = TextCtrl(window, value=str(value)) field.text_type = NUMBER_SETTING elif isinstance(value, dict): subpage = Panel(window) vbox = BoxSizer(VERTICAL) for lbl in sorted(value.keys()): hbox = BoxSizer(HORIZONTAL) value2 = value[lbl] label = StaticText(subpage, label=lbl) hbox.Add(label, flag=RIGHT, border=8) subfield = Field(None, lbl) item = self.field_from_value(subpage, value2, subfield) field.add_child(subfield) if item is not None: hbox.Add(item, proportion=1) vbox.Add(hbox, flag=EXPAND | LEFT | RIGHT | TOP, border=5) vbox.Add((-1, 5)) subpage.SetSizer(vbox) subpage.Show() item = subpage else: # This is left for bug reporting purposes. printer.out(("{} from the field {} was not assigned to " + "{} because type {} wasn't properly handled.").format( value, field, window, type(value))) field.widget = item return item
def field_from_value(self, window, value, field): item = None if isinstance(value, basestring): item = TextCtrl(window, value=value) field.text_type = STRING_SETTING elif isinstance(value, list): if isinstance(value[0], basestring): item = TextCtrl(window, value=", ".join(value)) field.text_type = STRINGLIST_SETTING elif isinstance(value[0], int): item = TextCtrl(window, value=", ".join((str(x) for x in value))) field.text_type = INTEGERLIST_SETTING elif isinstance(value, bool): item = CheckBox(window, -1, '', (120, 75)) item.SetValue(value) elif isinstance(value, int): item = TextCtrl(window, value=str(value)) field.text_type = INTEGER_SETTING elif isinstance(value, dict): subpage = Panel(window) vbox = BoxSizer(VERTICAL) alpha = value.keys() alpha.sort() for lbl in alpha: hbox = BoxSizer(HORIZONTAL) value2 = value[lbl] label = StaticText(subpage, label=lbl) hbox.Add(label, flag=RIGHT, border=8) subfield = Field(None, lbl) item = self.field_from_value(subpage, value2, subfield) field.add_child(subfield) if item is not None: hbox.Add(item, proportion=1) vbox.Add(hbox, flag=EXPAND | LEFT | RIGHT | TOP, border=5) vbox.Add((-1, 5)) subpage.SetSizer(vbox) subpage.Show() item = subpage field.wx_field = item return item
class PreviewWindow(Frame): def __init__(self, setting_maneger: SettingManeger, contents_display: ContentsDisplay, *args, **kw): super().__init__(*args, **kw) icon_bundle = self.GetParent().GetIcons() if not icon_bundle.IsEmpty(): self.SetIcon(icon_bundle.GetIconByIndex(0)) self.sm = setting_maneger self.main_window = self.GetParent() self.contents_display = contents_display self.panel = Panel(self) space_length, wrap_length, newline_count = self.sm.formmat_parameter self.space_lbl = NormalText(self.panel) self.space_display = IncrementWidget(space_length, min_=0, parent=self.panel, listener=self.check) self.wrap_lbl = NormalText(self.panel) self.wrap_length_display = IncrementWidget(wrap_length, parent=self.panel, listener=self.check) self.newline_lbl = NormalText(self.panel) self.newline_display = IncrementWidget(newline_count, min_=0, parent=self.panel, listener=self.check) self.entry = PreviewEntry(self.panel, style=TE_MULTILINE | TE_READONLY | HSCROLL) self.change_language() self.set_color() self.layout() self.update() self.contents_display.Bind(EVT_TEXT, self.update) def layout(self): master_grid = FlexGridSizer(rows=2, cols=1, gap=(0, 0)) grid = GridSizer(rows=2, cols=3, gap=(0, 0)) grid.Add(self.space_lbl, 0, ALIGN_CENTER) grid.Add(self.wrap_lbl, 0, ALIGN_CENTER) grid.Add(self.newline_lbl, 0, ALIGN_CENTER) grid.Add(self.space_display, 0, ALIGN_CENTER) grid.Add(self.wrap_length_display, 0, ALIGN_CENTER) grid.Add(self.newline_display, 0, ALIGN_CENTER) master_grid.Add(grid, 0, ALIGN_CENTER | ALL, 10) master_grid.Add(self.entry, 1, EXPAND) master_grid.AddGrowableRow(1) master_grid.AddGrowableCol(0) self.panel.SetSizer(master_grid) self.panel.Fit() self.Fit() width, height = self.GetSize() height = WINDOW_HEIGHT self.SetSize(-1, -1, width, height) def set_color(self): self.entry.SetBackgroundColour('#eee') def change_language(self): language = self.sm.selected_language space_length_lbl = language[SPACE_LENGTH_LABEL] wrap_length_lbl = language[WRAP_LENGTH_LABEL] newline_count_lbl = language[NEWLINE_COUNT_LABEL] self.space_lbl.SetLabel(space_length_lbl) self.wrap_lbl.SetLabel(wrap_length_lbl) self.newline_lbl.SetLabel(newline_count_lbl) self.panel.Layout() self.Layout() def check(self): space = self.space_display.value max_len = self.wrap_length_display.value margin = 2 indent = 8 + space if max_len - indent < margin: max_len = indent + margin self.wrap_length_display.set_value(max_len) if indent + margin == max_len: self.wrap_length_display.left_btn.Disable() else: self.wrap_length_display.left_btn.Enable() self.panel.Layout() self.sm.set_parameter([ self.space_display.value, self.wrap_length_display.value, self.newline_display.value ]) self.update() def update(self, event=None): space_length, wrap_length, newline_count = self.sm.formmat_parameter output = self.contents_display.convert_string(space_length, wrap_length, newline_count) self.entry.SetValue(output) if event is not None: event.Skip() def Destroy(self, is_destroy=False): self.Hide() return False
class MainWindow(Frame): def __init__(self, *args, **kw): super().__init__(*args, **kw) self.sm = SettingManeger() icon_file = get_data_safety(self.sm.setting, ICON_FILE) if icon_file is not None and exists(icon_file): icon = Icon(find_data_file(icon_file)) self.SetIcon(icon) self.menubar, self.language_menu_item_list = self.create_menubar( self.sm.language_list) self.SetMenuBar(self.menubar) if 0 <= len( self.language_menu_item_list) - 1 <= self.sm.language_index: self.language_menu_item_list[self.sm.language_index].Check() self.panel = Panel(self) self.preview_button = NormalButton(self.panel, label=SHOW_LABEL, size=(40, 40), pos=(10, 10)) self.separeter_line = StaticLine(self.panel, size=(3000, 2)) self.add_button = NormalButton(self.panel, label=ADD_LABEL, size=(40, 40)) self.timer_display = TimerDisplay(self, parent=self.panel) self.contents_display = ContentsDisplay(self, self.timer_display, parent=self.panel, style=ALWAYS_SHOW_SB) self.preview_window = PreviewWindow(self.sm, self.contents_display, parent=self) welcome_contents = self.sm.welcome_contents_list[ self.sm. language_index] if self.sm.welcome_contents_list is not None else ERROR_MESSAGE self.welcome_window = ScrolledWindow(welcome_contents, parent=self) about_contents = self.sm.about_contents_list[ self.sm. language_index] if self.sm.about_contents_list is not None else ERROR_MESSAGE self.about_window = ScrolledWindow(about_contents, parent=self) self.reset() self.change_language() self.connect() self.set_color() self.layout() def connect(self): self.menubar.Bind(EVT_MENU, lambda x: self.contents_display.export(), id=ID_FILE_EXPORT) self.menubar.Bind(EVT_MENU, lambda x: self.Destroy(), id=ID_FILE_EXIT) self.menubar.Bind(EVT_MENU, lambda x: self.run(), id=ID_EDIT_TIMER_START) self.menubar.Bind(EVT_MENU, lambda x: self.pause(), id=ID_EDIT_TIMER_PAUSE) self.menubar.Bind(EVT_MENU, lambda x: self.reset(), id=ID_EDIT_TIMER_RESET) self.menubar.Bind(EVT_MENU, lambda x: self.new(), id=ID_EDIT_TIME_STAMP_NEW) self.menubar.Bind(EVT_MENU, lambda x: self.show_preview(), id=ID_VIEW_SHOW_PREVIEW) self.menubar.Bind(EVT_MENU, lambda x: self.welcome_window.Show(), id=ID_HELP_WELCOME) self.menubar.Bind(EVT_MENU, lambda x: open_github(), id=ID_HELP_VISIT_GITHUB) self.menubar.Bind(EVT_MENU, lambda x: self.about_window.Show(), id=ID_HELP_ABOUT) self.timer_display.start_btn.Bind(EVT_BUTTON, lambda x: self.run()) self.timer_display.pause_btn.Bind(EVT_BUTTON, lambda x: self.pause()) self.timer_display.reset_btn.Bind(EVT_BUTTON, lambda x: self.reset()) self.preview_button.Bind(EVT_BUTTON, lambda x: self.show_preview()) self.add_button.Bind(EVT_BUTTON, lambda x: self.new()) def set_color(self): pass def layout(self): vbox = BoxSizer(VERTICAL) vbox.Add(self.timer_display, 0, EXPAND) vbox.Add(self.contents_display, 1, EXPAND | LEFT, 10) vbox.Add(self.separeter_line, 0, TOP, 5) vbox.Add(self.add_button, 0, ALIGN_CENTER | TOP | BOTTOM, 5) self.panel.SetSizer(vbox) self.Show() def create_menubar(self, language_list, style=0): modifier = 'Ctrl' if name == 'nt' else 'Opt' menubar = MenuBar() menubar_file = Menu() menubar_file.Append(ID_FILE_EXPORT, '&Export\t' + modifier + 'E') menubar_file.AppendSeparator() menubar_file.Append(ID_FILE_EXIT, 'E&xit\t' + modifier + 'W') menubar_edit = Menu() menubar_edit_timer = Menu() menubar_edit.AppendSubMenu(menubar_edit_timer, '&Timer') menubar_edit_timer.Append(ID_EDIT_TIMER_START, '&Start\t' + modifier + 'S') menubar_edit_timer.Append(ID_EDIT_TIMER_PAUSE, '&Pause\t' + modifier + 'P') menubar_edit_timer.Append(ID_EDIT_TIMER_RESET, '&Reset\t' + modifier + 'R') menubar_edit_time_stamp = Menu() menubar_edit.AppendSubMenu(menubar_edit_time_stamp, 'Time &Stamp') menubar_edit_time_stamp.Append(ID_EDIT_TIME_STAMP_NEW, '&New\t' + modifier + 'N') menubar_view = Menu() menubar_view.AppendCheckItem(ID_VIEW_SHOW_PREVIEW, 'Show &Preview\t' + modifier + 'Shift+P') menubar_view_language = Menu() language_menu_item_list = [] if language_list is not None: menubar_view_language.Bind(EVT_MENU, lambda x: self.change_language()) menubar_view.AppendSubMenu(menubar_view_language, '&Language') for n in range(len(language_list)): language_menu_item_list.append( menubar_view_language.AppendRadioItem( ID_ANY, language_list[n]['Language Setting'])) menubar_help = Menu() menubar_help.Append(ID_HELP_WELCOME, '&Welcome\t' + modifier + 'Shift+H') menubar_help.AppendSeparator() menubar_help.Append(ID_HELP_VISIT_GITHUB, 'Visit &Github') menubar_help.AppendSeparator() menubar_help.Append(ID_HELP_ABOUT, '&About') menubar.Append(menubar_file, '&File') menubar.Append(menubar_edit, '&Edit') menubar.Append(menubar_view, '&View') menubar.Append(menubar_help, '&Help') return menubar, language_menu_item_list def change_language(self): modifier = 'Ctrl' if name == 'nt' else 'Opt' self.sm.language_index = self.selected_language selected_language = self.sm.selected_language file_ = get_data_safety(selected_language, 'File', '&File') export = get_data_safety(selected_language, 'Export', '&Export\t' + modifier + 'E') exit_ = get_data_safety(selected_language, 'Exit', 'E&xit\t' + modifier + 'W') self.menubar.SetMenuLabel(ID_FILE, file_) self.menubar.FindItemById(ID_FILE_EXPORT).SetItemLabel(export) self.menubar.FindItemById(ID_FILE_EXIT).SetItemLabel(exit_) edit = get_data_safety(selected_language, 'Edit', '&Edit') timer = get_data_safety(selected_language, 'Timer', '&Timer') start = get_data_safety(selected_language, 'Start', '&Start\t' + modifier + 'S') pause = get_data_safety(selected_language, 'Pause', '&Pause\t' + modifier + 'P') reset = get_data_safety(selected_language, 'Reset', '&Reset\t' + modifier + 'R') time_stamp = get_data_safety(selected_language, 'Time Stamp', 'Time &Stamp') new = get_data_safety(selected_language, 'New', '&New\t' + modifier + 'N') self.menubar.SetMenuLabel(ID_EDIT, edit) self.menubar.GetMenu(ID_EDIT).FindItemByPosition(0).SetItemLabel(timer) self.menubar.FindItemById(ID_EDIT_TIMER_START).SetItemLabel(start) self.menubar.FindItemById(ID_EDIT_TIMER_PAUSE).SetItemLabel(pause) self.menubar.FindItemById(ID_EDIT_TIMER_RESET).SetItemLabel(reset) self.menubar.GetMenu(ID_EDIT).FindItemByPosition(1).SetItemLabel( time_stamp) self.menubar.FindItemById(ID_EDIT_TIME_STAMP_NEW).SetItemLabel(new) view = get_data_safety(selected_language, 'View', '&View') show_preview = get_data_safety( selected_language, 'Show Preview', 'Show &Preview\t' + modifier + 'Shift+P') language = get_data_safety(selected_language, 'Language', '&Language') self.menubar.SetMenuLabel(ID_VIEW, view) self.menubar.FindItemById(ID_VIEW_SHOW_PREVIEW).SetItemLabel( show_preview) self.menubar.GetMenu(ID_VIEW).FindItemByPosition(1).SetItemLabel( language) help_ = get_data_safety(selected_language, 'Help', '&Help') welcome = get_data_safety(selected_language, 'Welcome', '&Welcome\t' + modifier + 'Shift+H') visit_github = get_data_safety(selected_language, 'Visit Github', 'Visit &Github') about = get_data_safety(selected_language, 'About', '&About') self.menubar.SetMenuLabel(ID_HELP, help_) self.menubar.FindItemById(ID_HELP_WELCOME).SetItemLabel(welcome) self.menubar.FindItemById(ID_HELP_VISIT_GITHUB).SetItemLabel( visit_github) self.menubar.FindItemById(ID_HELP_ABOUT).SetItemLabel(about) shown_welcome_window = self.welcome_window.IsShown() self.welcome_window.Destroy(True) welcome_content = self.sm.welcome_contents_list[ self. selected_language] if self.sm.welcome_contents_list is not None else ERROR_MESSAGE self.welcome_window = ScrolledWindow(welcome_content, parent=self) self.welcome_window.Show(shown_welcome_window) shown_about_window = self.about_window.IsShown() self.about_window.Destroy(True) about_content = self.sm.about_contents_list[ self. selected_language] if self.sm.about_contents_list is not None else ERROR_MESSAGE self.about_window = ScrolledWindow(about_content, parent=self) self.about_window.Show(shown_about_window) shown_preview_window = self.preview_window.IsShown() self.preview_window.Destroy(True) self.preview_window = PreviewWindow(self.sm, self.contents_display, parent=self) self.preview_window.Show(shown_preview_window) def run(self): self.add_button.Enable() self.preview_button.Enable() self.menubar.FindItemById(ID_FILE_EXPORT).Enable(True) self.menubar.FindItemById(ID_EDIT_TIMER_START).Enable(False) self.menubar.FindItemById(ID_EDIT_TIMER_PAUSE).Enable(True) self.menubar.FindItemById(ID_EDIT_TIMER_RESET).Enable(True) self.menubar.FindItemById(ID_EDIT_TIME_STAMP_NEW).Enable(True) self.menubar.FindItemById(ID_VIEW_SHOW_PREVIEW).Enable(True) self.timer_display.start() def pause(self): self.menubar.FindItemById(ID_EDIT_TIMER_START).Enable(True) self.menubar.FindItemById(ID_EDIT_TIMER_PAUSE).Enable(False) self.menubar.FindItemById(ID_EDIT_TIMER_RESET).Enable(True) self.timer_display.pause() def reset(self): self.menubar.FindItemById(ID_FILE_EXPORT).Enable(False) self.menubar.FindItemById(ID_EDIT_TIMER_START).Enable(True) self.menubar.FindItemById(ID_EDIT_TIMER_PAUSE).Enable(False) self.menubar.FindItemById(ID_EDIT_TIMER_RESET).Enable(False) self.menubar.FindItemById(ID_EDIT_TIME_STAMP_NEW).Enable(False) self.menubar.FindItemById(ID_VIEW_SHOW_PREVIEW).Enable(False) if self.preview_window.IsShown(): self.show_preview() self.add_button.Disable() self.preview_button.Disable() self.timer_display.reset() self.contents_display.reset() def new(self): self.contents_display.add_contents_panel() self.preview_window.update() def show_preview(self): menu_show_preview = self.menubar.FindItemById(ID_VIEW_SHOW_PREVIEW) if self.preview_window.IsShown(): self.preview_button.SetLabel(SHOW_LABEL) menu_show_preview.Check(False) self.preview_window.Hide() else: self.preview_button.SetLabel(HIDE_LABEL) menu_show_preview.Check(True) self.preview_window.update() self.preview_window.Show() def Destroy(self): self.sm.save_setting() return super().Destroy() @property def selected_language(self): for n, menu_item in enumerate(self.language_menu_item_list): if menu_item.IsChecked(): return n
def __create_widgets(self): panel = Panel(self) sizer = GridBagSizer(5, 5) row = 0 col = 0 label = StaticText(panel, label=u'Root folder:') sizer.Add(label, pos=(row, col)) col += 1 col_width = 4 self.__txt_root_path = TextCtrl(panel) sizer.Add(self.__txt_root_path, pos=(row, col), span=(1, col_width), flag=FLAG_ALL_AND_EXPAND) col += col_width self.__btn_set_root = Button(panel, label=u'Set root folder') self.__btn_set_root.Bind(EVT_BUTTON, self.__set_root_folder) sizer.Add(self.__btn_set_root, pos=(row, col), flag=FLAG_ALL_AND_EXPAND) row += 1 col = 0 label = StaticText(panel, label=u'Url:') sizer.Add(label, pos=(row, col)) col += 1 self.__txt_url = TextCtrl( panel, value=u'https://www.google.com/') # TODO: remove url sizer.Add(self.__txt_url, pos=(row, col), flag=FLAG_ALL_AND_EXPAND) col += 1 label = StaticText(panel, label=u'Browser:') sizer.Add(label, pos=(row, col), flag=FLAG_ALL_AND_EXPAND) col += 1 self.__cb_browser = Choice(panel, choices=Browser.get_supported_browsers()) self.__cb_browser.Select(0) sizer.Add(self.__cb_browser, pos=(row, col), flag=FLAG_ALL_AND_EXPAND) col += 1 self.bth_open_url = Button(panel, label=u'Open url') self.bth_open_url.Bind(EVT_BUTTON, self.__open_url) sizer.Add(self.bth_open_url, pos=(row, col), flag=FLAG_ALL_AND_EXPAND) col += 1 self.bth_close_url = Button(panel, label=u'Close browser') self.bth_close_url.Bind(EVT_BUTTON, self.__close_browser) sizer.Add(self.bth_close_url, pos=(row, col), flag=FLAG_ALL_AND_EXPAND) row += 1 col = 0 tabs = Tabs(panel, [(GeneratorTab, "Generator"), (EditorTab, "Editor"), (TestRunnerTab, "Test runner"), (SelectorFinderTab, "Selector finder")]) sizer.Add(tabs, pos=(row, col), span=(1, 6), flag=FLAG_ALL_AND_EXPAND) sizer.AddGrowableCol(1, 1) sizer.AddGrowableRow(2, 1) panel.SetSizer(sizer) self.Layout()
class Window(Frame): def __init__(self): self.files = [] self.path = None # init window Frame.__init__(self, None, ID_ANY, "CUT", size=(688, 800)) self.Bind(EVT_CLOSE, lambda x: self.Destroy()) loc = Icon() loc.CopyFromBitmap(Bitmap('icon.ico', BITMAP_TYPE_ANY)) self.SetIcon(loc) self.panel = Panel(self, EXPAND) self.sizer = BoxSizer(VERTICAL) self.sizer.Add( FileInput(self.panel, text_button="Open File", callback=self._set_file, file_type=file_exts, text_title="OPEN", text_open_file="File"), 1, EXPAND) # Create Input fields self._start_input = TimeInput(self.panel, label='START') self._end_input = TimeInput(self.panel, label='END') self._scale_input = SimpleInput(self.panel, label='Width:Height', initial='-1:-1') self._webm_input = SimpleInput(self.panel, label='WEBM Quality', initial='36') self._framerate_input = SimpleInput(self.panel, label='INPUT FRAMES FRAMERATE', initial='') # Create check inputs font = Font(20, MODERN, NORMAL, NORMAL, False, u'Consolas') self._audio_select = StandardSelection(parent=self.panel, options=list( audio_options.keys()), callback=None, title='Audio codec') self._video_select = StandardSelection(parent=self.panel, options=list( video_options.keys()), callback=None, title='Video format') # Add inputs to self.sizer self.sizer.Add(self._video_select, 1, EXPAND) self.sizer.Add(self._audio_select, 1, EXPAND) self.sizer.Add( FileInput(self.panel, text_button="Clone time", callback=self._clone_time, file_type=file_exts, text_title="OPEN", text_open_file="File"), 1, EXPAND) self.sizer.Add(self._start_input, 1, EXPAND) self.sizer.Add(self._end_input, 1, EXPAND) self.sizer.Add(self._scale_input, 1, EXPAND) self.sizer.Add(self._webm_input, 1, EXPAND) self.sizer.Add(self._framerate_input, 1, EXPAND) # Add Button self.sizer.Add( SimpleButton(self.panel, text_button='CUT', callback=self._submit_task), 1, EXPAND) self.panel.SetSizer(self.sizer) @property def start_time(self): return self._start_input.get_value() @property def end_time(self): return self._end_input.get_value() @property def video_selection(self): return video_options[self._video_select.get_selection()] @property def audio_selection(self): return self._audio_select.get_selection() @property def input_framerate(self): return self._framerate_input.get_value() @property def scale_input(self): return self._scale_input.get_value() @property def webm_input(self): return self._webm_input.get_value() def _clone_time(self, path, files): data = files[-1] start, end = findall(r"\[([\d+|-]+)_([\d+|-]+)\]", data)[-1] self._start_input.set_value(unformat_time(start)) self._end_input.set_value(unformat_time(end)) def _set_file(self, path, files): self.path = path self.files = files def _add_progress_bar(self): progress_bar = ProgressBar(self.panel, style=GA_HORIZONTAL) self.sizer.Add(progress_bar, 0, EXPAND) self.Size = (self.Size[0], self.Size[1] + 20 ) # Enlarge window to fit new progress bar self.Update() return progress_bar def _submit_task(self, event): info('START TASK') if self._video_select.get_selection() == 'gif': task = TaskGif else: task = Task bar = self._add_progress_bar() task(self, bar).start()