#!/usr/bin/python # -*- coding: utf-8 -*- # """ Implements all items from menu inheriting from abstract class ItemMenu. Name: main.py Author: Alessandro dos Santos Ferreira ( santosferreira.alessandro@gmail.com ) """ import sys if sys.version_info[0] < 3: import Tkinter as Tk else: import tkinter as Tk from abc import ABCMeta, abstractmethod class ItemMenu(object): __metaclass__ = ABCMeta parent = None shortcut = None action = None def __init__(self, parent): self.parent = parent @abstractmethod def render(self, menu): pass class Command(ItemMenu): label = None def __init__(self, parent, label, action, shortcut = None): super(self.__class__, self).__init__(parent) self.label = label self.action = action if shortcut is not None: self.shortcut = str(shortcut).upper() def render(self, menu): accelerator = None if self.shortcut is None else "Ctrl+" + str(self.shortcut) underline = None if self.shortcut is None else self.label.upper().find( self.shortcut ) menu.add_command(label=self.label, command=self.action, accelerator=accelerator, underline=underline) class Separator(ItemMenu): def __init__(self, parent): super(self.__class__, self).__init__(parent) def render(self, menu): menu.add_separator() class CheckButton(ItemMenu): label = None default_state = None def __init__(self, parent, label, action, shortcut = None, default_state = True): super(self.__class__, self).__init__(parent) self.label = label self.action = action if shortcut is not None: self.shortcut = str(shortcut).upper() self.default_state = default_state def render(self, menu): accelerator = None if self.shortcut is None else "Ctrl+" + str(self.shortcut) underline = None if self.shortcut is None else self.label.upper().find( self.shortcut ) self.state = Tk.BooleanVar() self.state.set(self.default_state) menu.add_checkbutton(label=self.label, onvalue=True, offvalue=False, command=self.action, accelerator=accelerator, underline=underline, variable = self.state)