GUI Pmw Python

#Pmw copyright
#Copyright 1997-1999 Telstra Corporation Limited, Australia 
#Copyright 2000-2002 Really Good Software Pty Ltd, Australia
#Permission is hereby granted, free of charge, to any person obtaining a copy 
#of this software and associated documentation files (the "Software"), to deal 
#in the Software without restriction, including without limitation the rights 
#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 
#copies of the Software, and to permit persons to whom the Software is furnished 
#to do so, subject to the following conditions:
#The above copyright notice and this permission notice shall be included in all 
#copies or substantial portions of the Software.
#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 
#INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 
#PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 
#HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 
#OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 
#SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 
title = 'Pmw.MenuBar demonstration'
# Import Pmw from this directory tree.
import sys
sys.path[:0] = ['../../..']
import Tkinter
import Pmw
class Demo:
    def __init__(self, parent):
  # Create the Balloon.
  self.balloon = Pmw.Balloon(parent)
  # Create and pack the MenuBar.
  menuBar = Pmw.MenuBar(parent,
    hull_relief = 'raised',
    hull_borderwidth = 1,
    balloon = self.balloon)
  menuBar.pack(fill = 'x')
  self.menuBar = menuBar
  # Add some buttons to the MenuBar.
  menuBar.addmenu('File', 'Close this window or exit')
  menuBar.addmenuitem('File', 'command', 'Close this window',
    command = PrintOne('Action: close'),
    label = 'Close')
  menuBar.addmenuitem('File', 'separator')
  menuBar.addmenuitem('File', 'command', 'Exit the application',
    command = PrintOne('Action: exit'),
    label = 'Exit')
  menuBar.addmenu('Edit', 'Cut, copy or paste')
  menuBar.addmenuitem('Edit', 'command', 'Delete the current selection',
    command = PrintOne('Action: delete'),
    label = 'Delete')
  menuBar.addmenu('Options', 'Set user preferences')
  menuBar.addmenuitem('Options', 'command', 'Set general preferences',
    command = PrintOne('Action: general options'),
    label = 'General...')
  # Create a checkbutton menu item.
        self.toggleVar = Tkinter.IntVar()
  # Initialise the checkbutton to 1:
        self.toggleVar.set(1)
        menuBar.addmenuitem('Options', 'checkbutton', 'Toggle me on/off',
                label = 'Toggle',
                command = self._toggleMe,
                variable = self.toggleVar)
        self._toggleMe()
  menuBar.addcascademenu('Options', 'Size',
    'Set some other preferences', traverseSpec = 'z', tearoff = 1)
  for size in ('tiny', 'small', 'average', 'big', 'huge'):
      menuBar.addmenuitem('Size', 'command', 'Set size to ' + size,
                    command = PrintOne('Action: size ' + size),
        label = size)
  menuBar.addmenu('Help', 'User manuals', side = 'right')
  menuBar.addmenuitem('Help', 'command', 'About this application',
    command = PrintOne('Action: about'),
    label = 'About...')
  # Create and pack the main part of the window.
  self.mainPart = Tkinter.Label(parent,
    text = 'This is the\nmain part of\nthe window',
    background = 'black',
    foreground = 'white',
    padx = 30,
    pady = 30)
  self.mainPart.pack(fill = 'both', expand = 1)
  # Create and pack the MessageBar.
  self.messageBar = Pmw.MessageBar(parent,
    entry_width = 40,
    entry_relief='groove',
    labelpos = 'w',
          label_text = 'Status:')
  self.messageBar.pack(fill = 'x', padx = 10, pady = 10)
  self.messageBar.message('state', 'OK')
  buttonBox = Pmw.ButtonBox(parent)
  buttonBox.pack(fill = 'x')
  buttonBox.add('Disable\nall', command = menuBar.disableall)
  buttonBox.add('Enable\nall', command = menuBar.enableall)
  buttonBox.add('Create\nmenu', command = self.add)
  buttonBox.add('Delete\nmenu', command = self.delete)
  buttonBox.add('Create\nitem', command = self.additem)
  buttonBox.add('Delete\nitem', command = self.deleteitem)
  # Configure the balloon to displays its status messages in the
  # message bar.
  self.balloon.configure(statuscommand = self.messageBar.helpmessage)
  self.testMenuList = []
    def _toggleMe(self):
        print 'Toggle value:', self.toggleVar.get()
    def add(self):
  if len(self.testMenuList) == 0:
      num = 0
  else:
      num = self.testMenuList[-1]
  num = num + 1
  name = 'Menu%d' % num
  self.testMenuList.append(num)
  self.menuBar.addmenu(name, 'This is ' + name)
    def delete(self):
  if len(self.testMenuList) == 0:
      self.menuBar.bell()
  else:
      num = self.testMenuList[0]
      name = 'Menu%d' % num
      del self.testMenuList[0]
      self.menuBar.deletemenu(name)
    def additem(self):
  if len(self.testMenuList) == 0:
      self.menuBar.bell()
  else:
      num = self.testMenuList[-1]
      menuName = 'Menu%d' % num
            menu = self.menuBar.component(menuName + '-menu')
            if menu.index('end') is None:
                label = 'item X'
            else:
                label = menu.entrycget('end', 'label') + 'X'
            self.menuBar.addmenuitem(menuName, 'command', 'Help for ' + label,
                    command = PrintOne('Action: ' + menuName + ': ' + label),
                    label = label)
            
    def deleteitem(self):
  if len(self.testMenuList) == 0:
      self.menuBar.bell()
  else:
      num = self.testMenuList[-1]
      menuName = 'Menu%d' % num
            menu = self.menuBar.component(menuName + '-menu')
            if menu.index('end') is None:
                self.menuBar.bell()
            else:
                self.menuBar.deletemenuitems(menuName, 0)
            
class PrintOne:
    def __init__(self, text):
        self.text = text
    def __call__(self):
        print self.text
######################################################################
# Create demo in root window for testing.
if __name__ == '__main__':
    root = Tkinter.Tk()
    Pmw.initialise(root)
    root.title(title)
    exitButton = Tkinter.Button(root, text = 'Exit', command = root.destroy)
    exitButton.pack(side = 'bottom')
    widget = Demo(root)
    root.mainloop()