Exemple #1
0
 def insert(self, index=None, *nodes):
     properties = [node.get_altered_options() for node in nodes]
     nodes = super().insert(index, *nodes)
     index = len(self.nodes) if index is None else index
     for i, node in enumerate(nodes):
         node._menu = self._menu
         self._menu.insert(index, node.type)
         menu_config(self._menu, index, **properties[i])
         index += 1
Exemple #2
0
 def insert(self, index=None, *nodes):
     for node in nodes:
         # cache previous config which may be unobtainable after insert
         node._prev_options = node.get_altered_options()
     nodes = super().insert(index, *nodes)
     index = len(self.nodes) if index is None else index
     for i, node in enumerate(nodes, index):
         node._menu = self._menu
         self._menu.insert(i, node.type)
         menu_config(self._menu, i, **node._prev_options)
Exemple #3
0
 def insert(self, index=None, *nodes):
     for node in nodes:
         # cache previous config which may be unobtainable after insert
         node._prev_options = node.get_altered_options()
     # get the nodes that have been inserted whether cloned or otherwise
     nodes = super().insert(index, *nodes)
     index = len(self.nodes) if index is None else index
     for i, node in enumerate(nodes, index):
         node._menu = self.sub_menu
         self.sub_menu.insert(i, node.type)
         # apply node properties from backup
         menu_config(self.sub_menu, i, **node._prev_options)
Exemple #4
0
 def insert(self, index=None, *nodes):
     # create a backup of node properties in case cloning takes place
     properties = [node.get_altered_options() for node in nodes]
     # get the nodes that have actually been inserted whether cloned or otherwise
     nodes = super().insert(index, *nodes)
     index = len(self.nodes) if index is None else index
     for i, node in enumerate(nodes):
         node._menu = self.sub_menu
         # apply node properties from backup
         try:
             self.sub_menu.insert(index, node.type)
             menu_config(self.sub_menu, self.get_index(), **properties[i])
         except tk.TclError:
             logging.error("Menu item insert failed")
         finally:
             index += 1
Exemple #5
0
 def get_item_options(menu, index):
     keys = menu_config(menu, index)
     if 'menu' in keys:
         keys.pop('menu')
     return {
         key: keys[key][-1]
         for key in keys if keys[key][-1] != keys[key][-2]
     }
Exemple #6
0
    def _menu_from_xml(cls, node, menu=None, widget=None):
        for sub_node in node:
            attrib = cls.attrib(sub_node)
            if sub_node.tag in MenuConverter._types and menu is not None:
                menu.add(sub_node.tag)
                menu_config(menu, menu.index(tk.END), **attrib.get("menu", {}))
                continue

            obj_class = cls._get_class(sub_node)
            if obj_class == legacy.Menu:
                menu_obj = obj_class(widget, **attrib.get("attr", {}))
                if widget:
                    widget.configure(menu=menu_obj)
                elif menu:
                    menu.add(tk.CASCADE, menu=menu_obj)
                    menu_config(menu, menu.index(tk.END),
                                **attrib.get("menu", {}))
                cls._menu_from_xml(sub_node, menu_obj)
Exemple #7
0
 def get_options(self):
     keys = menu_config(self._menu, self.get_index())
     return {key: keys[key][-1] for key in keys}
Exemple #8
0
 def get_altered_options(self):
     keys = menu_config(self._menu, self.get_index())
     return {key: keys[key][-1] for key in keys if keys[key][-1] != keys[key][-2]}
Exemple #9
0
 def get_option(self, key):
     return menu_config(self._menu, self.get_index(), key)
Exemple #10
0
 def _on_item_change(self, prop, value):
     # Called when the style of a menu item changes
     for node in self._tree.get():
         menu_config(node._menu, node.get_index(), **{prop: value})
         # For changes in label we need to change the label on the node as well node
         node.label = node._menu.entrycget(node.get_index(), 'label')