def _create_combobox(self, window, field, verbose, enum): values = [camel_case_to_spaces(e.name) for e in enum] combobox = window.Combobox( label=verbose, values=values, initial_value=camel_case_to_spaces(getattr(self, field).name), on_select_function=lambda e: self._set_combobox(e, field), ) combobox.enum = enum return combobox
def update_field( self, name, nickname, value: tp.Any, field_type: type, docstring="", ): """Update widgets with given field information. The `entry` argument is not used by this base class, but may be used by child methods. """ self.field_name = name self.field_type = field_type self.field_nickname = camel_case_to_spaces(nickname) if self.CAMEL_CASE_NICKNAMES else nickname self.field_docstring = docstring if docstring else "DOC-TODO" self.field_links = [] if self.field_name_label.var.get() != self.field_nickname: self.field_name_label.var.set(self.field_nickname) self.update_field_value_display(value) self.tool_tip.text = self.field_docstring self.unhide()
def refresh_categories(self): """There are few enough categories changing rarely enough that the widgets can just be regenerated.""" self.select_category(None) for box, label in self.category_boxes.values(): box.destroy() label.destroy() self.category_boxes = {} with self.set_master(self.category_i_frame): categories = self._get_display_categories() for row, category in enumerate(categories): box = self.Frame( row=row, width=self.CATEGORY_BOX_WIDTH, height=self.CATEGORY_ROW_HEIGHT, highlightthickness=self.CATEGORY_ROW_HIGHLIGHT, bg=self.CATEGORY_UNSELECTED_BG, sticky="nsew", ) label_text = camel_case_to_spaces(category).replace("_", ": ") label = self.Label( text=label_text, sticky="w", row=row, fg=self._get_category_text_fg(category), bg=self.CATEGORY_UNSELECTED_BG, padx=1, font_size=10, ) for widget in {label, box}: bind_events( widget, { "<Button-1>": lambda e, c=category: self.select_category( c, view_change=True), "<Up>": self._category_press_up, "<Down>": self._category_press_down, "<Prior>": self._category_press_up, "<Next>": self._category_press_down, }, ) if category == self.active_category: label["bg"] = self.CATEGORY_SELECTED_BG box["bg"] = self.CATEGORY_SELECTED_BG self.link_to_scrollable(self.category_canvas, box, label) self.category_boxes[category] = (box, label) self.category_canvas.yview_moveto(0) self.category_i_frame.columnconfigure(0, weight=1)