def __init__(self, parent, integer=Integer(), **kw): #kw['state'] = 'disabled' kw.setdefault('anchor', 'nw') kw.setdefault('relief', 'sunken') kw.setdefault('width', 10) kw.setdefault('justify', 'left') self._var = StringVar() Label.__init__(self, parent, textvariable=self._var, **kw) self._integer_view = StringViewFormatter(integer) self._update_integer() self._factorization_enabled = False self.bind("<Configure>", self._update_width) self._init_menu()
def integer(self, value): self._integer_view = StringViewFormatter(value) if self._factorization_enabled: self._integer_view.mode = StringViewFormatter.VERBOSE self._update_integer()
class IntegerView(Label): """This is the frame for displaying Integer with ability to factorize it. """ def __init__(self, parent, integer=Integer(), **kw): #kw['state'] = 'disabled' kw.setdefault('anchor', 'nw') kw.setdefault('relief', 'sunken') kw.setdefault('width', 10) kw.setdefault('justify', 'left') self._var = StringVar() Label.__init__(self, parent, textvariable=self._var, **kw) self._integer_view = StringViewFormatter(integer) self._update_integer() self._factorization_enabled = False self.bind("<Configure>", self._update_width) self._init_menu() def _init_menu(self): self._menu = Menu(self, tearoff=0) self._menu.add_command(label="Copy", command=self._copy) self._menu.add_command(label="Copy LaTeX", command=self._copy_latex) # right button on Mac and other systems button = '2' if tools.IS_MAC else '3' self.bind("<Button-{}>".format(button), self._right_click) def _right_click(self, event): self._menu.post(event.x_root, event.y_root) def _copy(self): pyperclip.setcb(str(self._integer_view)) def _copy_latex(self): if self._factorization_enabled: cb = self._integer_view.str_latex() else: cb = self._integer_view.str_normal() pyperclip.setcb(cb) def _update_width(self, event): self['wraplength'] = self.winfo_width() - 10 def _update_integer(self): self._var.set(self._integer_view) @property def integer(self): return self._integer_view.object @integer.setter def integer(self, value): self._integer_view = StringViewFormatter(value) if self._factorization_enabled: self._integer_view.mode = StringViewFormatter.VERBOSE self._update_integer() def toggle_factorization(self, value): self._factorization_enabled = value if value: self._integer_view.mode = StringViewFormatter.VERBOSE else: self._integer_view.mode = StringViewFormatter.NORMAL self._update_integer()
def max_orders_wrapped(group, mode=StringViewFormatter.VERBOSE): format = lambda elem: StringViewFormatter(elem, mode=mode) return map(format, maximal_orders(group))
def transform_number(number): if type(number) in (SpectraElement, Integer): return StringViewFormatter(number) return StringViewFormatter(Integer(number))