Esempio n. 1
0
 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
Esempio n. 2
0
    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()
Esempio n. 3
0
    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)