Python GUI Tk : Menu
Menu/tool bars packed before middle
from Tkinter import * from tkMessageBox import * class NewMenuDemo(Frame): def __init__(self, parent=None): Frame.__init__(self, parent) self.pack(expand=YES, fill=BOTH) self.createWidgets() self.master.title("Toolbars and Menus") self.master.iconname("tkpython") def createWidgets(self): self.makeMenuBar() self.makeToolBar() L = Label(self, text='Menu and Toolbar Demo') L.config(relief=SUNKEN, width=40, height=10, bg='white') L.pack(expand=YES, fill=BOTH) def makeToolBar(self): toolbar = Frame(self, cursor='hand2', relief=SUNKEN, bd=2) toolbar.pack(side=BOTTOM, fill=X) Button(toolbar, text='Quit', command=self.quit ).pack(side=RIGHT) Button(toolbar, text='Hello', command=self.greeting).pack(side=LEFT) def makeMenuBar(self): self.menubar = Menu(self.master) self.master.config(menu=self.menubar) self.fileMenu() self.editMenu() # self.imageMenu() def fileMenu(self): pulldown = Menu(self.menubar) pulldown.add_command(label='Open...', command=self.notdone) pulldown.add_command(label='Quit', command=self.quit) self.menubar.add_cascade(label='File', underline=0, menu=pulldown) def editMenu(self): pulldown = Menu(self.menubar) pulldown.add_command(label='Paste', command=self.notdone) pulldown.add_command(label='Spam', command=self.greeting) pulldown.add_separator() pulldown.add_command(label='Delete', command=self.greeting) pulldown.entryconfig(4, state=DISABLED) self.menubar.add_cascade(label='Edit', underline=0, menu=pulldown) # def imageMenu(self): # photoFiles = ('guido.gif', 'java2s.gif', 'java2s.gif') # pulldown = Menu(self.menubar) # self.photoObjs = [] # for file in photoFiles: # img = PhotoImage(file='../gifs/' + file) # pulldown.add_command(image=img, command=self.notdone) # self.photoObjs.append(img) # keep a reference # self.menubar.add_cascade(label='Image', underline=0, menu=pulldown) def greeting(self): showinfo('greeting', 'Greetings') def notdone(self): showerror('Not implemented', 'Not yet available') def quit(self): if askyesno('Verify quit', 'Are you sure you want to quit?'): Frame.quit(self) if __name__ == '__main__': NewMenuDemo().mainloop() # if I'm run as a script
A big menu bar
from Tkinter import * def new_file(): print "Open new file" def open_file(): print "Open existing file" def stub_action(): print "Menu select" def makeCommandMenu(): CmdBtn = Menubutton(mBar, text='Button Commands', underline=0) CmdBtn.pack(side=LEFT, padx="2m") CmdBtn.menu = Menu(CmdBtn) CmdBtn.menu.add_command(label="Undo") CmdBtn.menu.entryconfig(0, state=DISABLED) CmdBtn.menu.add_command(label='New...', underline=0, command=new_file) CmdBtn.menu.add_command(label='Open...', underline=0, command=open_file) CmdBtn.menu.add_command(label='Wild Font', underline=0, font=('Tempus Sans ITC', 14), command=stub_action) CmdBtn.menu.add_command(bitmap="@bitmaps/RotateLeft") CmdBtn.menu.add('separator') CmdBtn.menu.add_command(label='Quit', underline=0, background='white', activebackground='green', command=CmdBtn.quit) CmdBtn['menu'] = CmdBtn.menu return CmdBtn def makeCascadeMenu(): CasBtn = Menubutton(mBar, text='Cascading Menus', underline=0) CasBtn.pack(side=LEFT, padx="2m") CasBtn.menu = Menu(CasBtn) CasBtn.menu.choices = Menu(CasBtn.menu) CasBtn.menu.choices.wierdones = Menu(CasBtn.menu.choices) CasBtn.menu.choices.wierdones.add_command(label='A') CasBtn.menu.choices.wierdones.add_command(label='B') CasBtn.menu.choices.wierdones.add_command(label='C') CasBtn.menu.choices.wierdones.add_command(label='D') CasBtn.menu.choices.add_command(label='A') CasBtn.menu.choices.add_command(label='B') CasBtn.menu.choices.add_command(label='C') CasBtn.menu.choices.add_command(label='D') CasBtn.menu.choices.add_command(label='E') CasBtn.menu.choices.add_command(label='F') CasBtn.menu.choices.add_cascade(label='G', menu=CasBtn.menu.choices.wierdones) CasBtn.menu.add_cascade(label='Scipts', menu=CasBtn.menu.choices) CasBtn['menu'] = CasBtn.menu return CasBtn def makeCheckbuttonMenu(): ChkBtn = Menubutton(mBar, text='Checkbutton Menus', underline=0) ChkBtn.pack(side=LEFT, padx='2m') ChkBtn.menu = Menu(ChkBtn) ChkBtn.menu.add_checkbutton(label='A') ChkBtn.menu.add_checkbutton(label='B') ChkBtn.menu.add_checkbutton(label="C") ChkBtn.menu.add_checkbutton(label='D') ChkBtn.menu.add_checkbutton(label='E') ChkBtn.menu.invoke(ChkBtn.menu.index('C')) ChkBtn['menu'] = ChkBtn.menu return ChkBtn def makeRadiobuttonMenu(): RadBtn = Menubutton(mBar, text='Radiobutton Menus', underline=0) RadBtn.pack(side=LEFT, padx='2m') RadBtn.menu = Menu(RadBtn) RadBtn.menu.add_radiobutton(label='A') RadBtn.menu.add_radiobutton(label='B') RadBtn.menu.add_radiobutton(label='C') RadBtn.menu.add_radiobutton(label='D') RadBtn.menu.add_radiobutton(label='E') RadBtn.menu.add_radiobutton(label='F') RadBtn.menu.add_radiobutton(label='G') RadBtn.menu.add_radiobutton(label='H') RadBtn.menu.add_radiobutton(label='I') RadBtn['menu'] = RadBtn.menu return RadBtn def makeDisabledMenu(): Dummy_button = Menubutton(mBar, text='Disabled Menu', underline=0) Dummy_button.pack(side=LEFT, padx='2m') Dummy_button["state"] = DISABLED return Dummy_button root = Tk() mBar = Frame(root, relief=RAISED, borderwidth=2) mBar.pack(fill=X) CmdBtn = makeCommandMenu() CasBtn = makeCascadeMenu() ChkBtn = makeCheckbuttonMenu() RadBtn = makeRadiobuttonMenu() NoMenu = makeDisabledMenu() mBar.tk_menuBar(CmdBtn, CasBtn, ChkBtn, RadBtn, NoMenu) root.title('Menus') root.mainloop()
Set up menu and add action to it
from Tkinter import * class AllTkinterWidgets: def __init__(self, master): frame = Frame(master, width=500, height=400, bd=1) frame.pack() self.mbar = Frame(frame, relief = 'raised', bd=2) self.mbar.pack(fill = X) self.filebutton = Menubutton(self.mbar, text = 'File') self.filebutton.pack(side = LEFT) self.filemenu = Menu(self.filebutton, tearoff=0) self.filebutton['menu'] = self.filemenu self.filemenu.add('command', label = 'Exit', command = self.quit) self.objectbutton = Menubutton(self.mbar, text = 'Object', ) self.objectbutton.pack(side = LEFT) self.objectmenu = Menu(self.objectbutton, tearoff=0) self.objectbutton['menu'] = self.objectmenu self.objectmenu.add('command', label = 'object', command = self.stub) self.editbutton = Menubutton(self.mbar, text = 'Edit', ) self.editbutton.pack(side = LEFT) self.editmenu = Menu(self.editbutton, tearoff=0) self.editbutton['menu'] = self.editmenu self.editmenu.add('command', label = 'edit', command = self.stub) self.viewbutton = Menubutton(self.mbar, text = 'View', ) self.viewbutton.pack(side = LEFT) self.viewmenu = Menu(self.viewbutton, tearoff=0) self.viewbutton['menu'] = self.viewmenu self.viewmenu.add('command', label = 'view', command = self.stub) self.toolsbutton = Menubutton(self.mbar, text = 'Tools', ) self.toolsbutton.pack(side = LEFT) self.toolsmenu = Menu(self.toolsbutton, tearoff=0) self.toolsbutton['menu'] = self.toolsmenu self.toolsmenu.add('command', label = 'tools', command = self.stub) self.helpbutton = Menubutton(self.mbar, text = 'Help', ) self.helpbutton.pack(side = RIGHT) self.helpmenu = Menu(self.helpbutton, tearoff=0) self.helpbutton['menu'] = self.helpmenu self.helpmenu.add('command', label = 'help', command = self.stub) def quit(self): root.destroy() def stub(self): pass root = Tk() all = AllTkinterWidgets(root) root.title('Tkinter Widgets') root.mainloop()
Disable a menu item
from Tkinter import * class TestMenu: def __init__(self, master): self.master = master self.menubar = Menu(self.master) self.cmdmenu = Menu(self.menubar) self.cmdmenu.add_command(label="Undo") self.cmdmenu.entryconfig(1, state=DISABLED) self.unused = Menu(self.menubar) self.menubar.add_cascade(label="Button Command", menu=self.cmdmenu) self.top = Toplevel(menu=self.menubar, width=500, relief=RAISED, borderwidth=2) def main(): root = Tk() root.withdraw() app = TestMenu(root) root.mainloop() if __name__ == '__main__': main()
Set menu item font
from Tkinter import * class TestMenu: def __init__(self, master): self.master = master self.menubar = Menu(self.master) self.cmdmenu = Menu(self.menubar) self.cmdmenu.add_command(label='Wild Font', underline=0, font=('Tempus Sans ITC', 14)) self.cmdmenu.add('separator') self.cmdmenu.add_command(label='Quit', underline=0, background='white', activebackground='green', command=self.master.quit) self.unused = Menu(self.menubar) self.menubar.add_cascade(label="Button Command", menu=self.cmdmenu) self.top = Toplevel(menu=self.menubar, width=500, relief=RAISED, borderwidth=2) def main(): root = Tk() root.withdraw() app = TestMenu(root) root.mainloop() if __name__ == '__main__': main()
Menu item mouse on (active) foreground color
from Tkinter import * class TestMenu: def __init__(self, master): self.master = master self.menubar = Menu(self.master) self.cmdmenu = Menu(self.menubar) self.cmdmenu.add_command(label='Quit', underline=0, background='white', activebackground='green', command=self.master.quit) self.unused = Menu(self.menubar) self.menubar.add_cascade(label="Button Command", menu=self.cmdmenu) self.top = Toplevel(menu=self.menubar, width=500, relief=RAISED, borderwidth=2) def main(): root = Tk() root.withdraw() app = TestMenu(root) root.mainloop() if __name__ == '__main__': main()
Underline for menu item text
from Tkinter import * class TestMenu: def __init__(self, master): self.master = master self.menubar = Menu(self.master) self.cmdmenu = Menu(self.menubar) self.cmdmenu.add_command(label='New...', underline=0) self.cmdmenu.add_command(label='Open...', underline=0) self.cmdmenu.add_command(label='Wild Font', underline=0, font=('Tempus Sans ITC', 14)) # self.cmdmenu.add_command(bitmap="someBitMap") self.cmdmenu.add('separator') self.unused = Menu(self.menubar) self.menubar.add_cascade(label="Button Command", menu=self.cmdmenu) self.top = Toplevel(menu=self.menubar, width=500, relief=RAISED, borderwidth=2) def main(): root = Tk() root.withdraw() app = TestMenu(root) root.mainloop() if __name__ == '__main__': main()
Menu separator
from Tkinter import * class TestMenu: def __init__(self, master): self.master = master self.menubar = Menu(self.master) self.cmdmenu = Menu(self.menubar) self.cmdmenu.add_command(label='New...', underline=0) self.cmdmenu.add_command(label='Open...', underline=0) self.cmdmenu.add_command(label='Wild Font', underline=0, font=('Tempus Sans ITC', 14)) # self.cmdmenu.add_command(bitmap="someBitMap") self.cmdmenu.add('separator') self.unused = Menu(self.menubar) self.menubar.add_cascade(label="Button Command", menu=self.cmdmenu) self.top = Toplevel(menu=self.menubar, width=500, relief=RAISED, borderwidth=2) def main(): root = Tk() root.withdraw() app = TestMenu(root) root.mainloop() if __name__ == '__main__': main()
Cascade Menu
from Tkinter import * class TestMenu: def __init__(self, master): self.master = master self.menubar = Menu(self.master) self.casmenu = Menu(self.menubar) self.casmenu.choices = Menu(self.casmenu) self.casmenu.choices.wierdones = Menu(self.casmenu.choices) self.casmenu.choices.wierdones.add_command(label='A') self.casmenu.choices.wierdones.add_command(label='B') self.casmenu.choices.wierdones.add_command(label='C') self.casmenu.choices.wierdones.add_command(label='D') self.casmenu.choices.add_command(label='A') self.casmenu.choices.add_command(label='B') self.casmenu.choices.add_command(label='C') self.casmenu.choices.add_command(label='D') self.casmenu.choices.add_command(label='E') self.casmenu.choices.add_command(label='F') self.casmenu.choices.add_cascade(label='G', menu=self.casmenu.choices.wierdones) self.casmenu.add_cascade(label='Scripts', menu=self.casmenu.choices) self.unused = Menu(self.menubar) self.menubar.add_cascade(label="Cascade Menu", menu=self.casmenu) self.top = Toplevel(menu=self.menubar, width=500, relief=RAISED, borderwidth=2) def main(): root = Tk() root.withdraw() app = TestMenu(root) root.mainloop() if __name__ == '__main__': main()
Disable a menu
from Tkinter import * class TestMenu: def __init__(self, master): self.master = master self.menubar = Menu(self.master) self.radmenu = Menu(self.menubar) self.radmenu.add_radiobutton(label='A') self.radmenu.add_radiobutton(label='B') self.radmenu.add_radiobutton(label='C') self.radmenu.add_radiobutton(label='D') self.radmenu.add_radiobutton(label='E') self.radmenu.add_radiobutton(label='F') self.radmenu.add_radiobutton(label='H') self.radmenu.add_radiobutton(label='L') self.radmenu.add_radiobutton(label='Z') self.menubar.add_cascade(label="Radiobutton Menu", menu=self.radmenu) self.menubar.entryconfig(1, state=DISABLED) self.top = Toplevel(menu=self.menubar, width=500, relief=RAISED, borderwidth=2) def main(): root = Tk() root.withdraw() app = TestMenu(root) root.mainloop() if __name__ == '__main__': main()
Creating a small menu
from Tkinter import * def callback(): print "called the callback!" root = Tk() menu = Menu(root) root.config(menu=menu) filemenu = Menu(menu) menu.add_cascade(label="File", menu=filemenu) filemenu.add_command(label="New", command=callback) filemenu.add_command(label="Open...", command=callback) filemenu.add_separator() filemenu.add_command(label="Exit", command=callback) helpmenu = Menu(menu) menu.add_cascade(label="Help", menu=helpmenu) helpmenu.add_command(label="About...", command=callback) mainloop()
Menu separator 2 and menu action
from Tkinter import * def callback(): print "called the callback!" root = Tk() menu = Menu(root) root.config(menu=menu) filemenu = Menu(menu) menu.add_cascade(label="File", menu=filemenu) filemenu.add_command(label="New", command=callback) filemenu.add_command(label="Open...", command=callback) filemenu.add_separator() filemenu.add_command(label="Exit", command=callback) helpmenu = Menu(menu) menu.add_cascade(label="Help", menu=helpmenu) helpmenu.add_command(label="About...", command=callback) mainloop()
Menu action
from Tkinter import * def callback(): print "called the callback!" root = Tk() # create a menu menu = Menu(root) root.config(menu=menu) filemenu = Menu(menu) menu.add_cascade(label="File", menu=filemenu) filemenu.add_command(label="New", command=callback) filemenu.add_command(label="Open...", command=callback) filemenu.add_separator() filemenu.add_command(label="Exit", command=callback) mainloop()
Add menu to a window
from Tkinter import * def callback(): print "called the callback!" root = Tk() # create a menu menu = Menu(root) root.config(menu=menu) filemenu = Menu(menu) menu.add_cascade(label="File", menu=filemenu) filemenu.add_command(label="New", command=callback) filemenu.add_command(label="Open...", command=callback) filemenu.add_separator() filemenu.add_command(label="Exit", command=callback) helpmenu = Menu(menu) menu.add_cascade(label="Help", menu=helpmenu) helpmenu.add_command(label="About...", command=callback) mainloop()
A Simple Form with Menu
from Tkinter import * from tkMessageBox import * def notdone(): showerror('Not implemented', 'Not yet available') def makemenu(parent): menubar = Frame(parent) menubar.pack(side=TOP, fill=X) fbutton = Menubutton(menubar, text='File', underline=0) fbutton.pack(side=LEFT) file = Menu(fbutton) file.add_command(label='New...', command=notdone, underline=0) file.add_command(label='Open...', command=notdone, underline=0) file.add_command(label='Quit', command=parent.quit, underline=0) fbutton.config(menu=file) ebutton = Menubutton(menubar, text='Edit', underline=0) ebutton.pack(side=LEFT) edit = Menu(ebutton, tearoff=0) edit.add_command(label='Cut', command=notdone, underline=0) edit.add_command(label='Paste', command=notdone, underline=0) edit.add_separator() ebutton.config(menu=edit) submenu = Menu(edit, tearoff=0) submenu.add_command(label='Spam', command=parent.quit, underline=0) submenu.add_command(label='Eggs', command=notdone, underline=0) edit.add_cascade(label='Stuff', menu=submenu, underline=0) return menubar if __name__ == '__main__': root = Tk() root.title('menu_frm') makemenu(root) msg = Label(root, text='Frame menu basics') msg.pack(expand=YES, fill=BOTH) msg.config(relief=SUNKEN, width=40, height=7, bg='beige') root.mainloop()
Three Menu inside a form
from Tkinter import * def notdone(): showerror('Not implemented', 'Not yet available') def makemenu(parent): menubar = Frame(parent) menubar.pack(side=TOP, fill=X) fbutton = Menubutton(menubar, text='File', underline=0) fbutton.pack(side=LEFT) file = Menu(fbutton) file.add_command(label='New...', command=notdone, underline=0) file.add_command(label='Open...', command=notdone, underline=0) file.add_command(label='Quit', command=parent.quit, underline=0) fbutton.config(menu=file) ebutton = Menubutton(menubar, text='Edit', underline=0) ebutton.pack(side=LEFT) edit = Menu(ebutton, tearoff=0) edit.add_command(label='Cut', command=notdone, underline=0) edit.add_command(label='Paste', command=notdone, underline=0) edit.add_separator() ebutton.config(menu=edit) submenu = Menu(edit, tearoff=0) submenu.add_command(label='Spam', command=parent.quit, underline=0) submenu.add_command(label='Eggs', command=notdone, underline=0) edit.add_cascade(label='Stuff', menu=submenu, underline=0) return menubar root = Tk() for i in range(3): frm = Frame() mnu = makemenu(frm) mnu.config(bd=2, relief=RAISED) frm.pack(expand=YES, fill=BOTH) Label(frm, bg='black', height=5, width=15).pack(expand=YES, fill=BOTH) Button(root, text="Bye", command=root.quit).pack() root.mainloop()
Framework for a single document interface
from Tkinter import * from tkMessageBox import * def notdone(): showerror('Not implemented', 'Not yet available') def makemenu(win): top = Menu(win) win.config(menu=top) file = Menu(top) file.add_command(label='New...', command=notdone, underline=0) file.add_command(label='Open...', command=notdone, underline=0) file.add_command(label='Quit', command=win.quit, underline=0) top.add_cascade(label='File', menu=file, underline=0) edit = Menu(top, tearoff=0) edit.add_command(label='Cut', command=notdone, underline=0) edit.add_command(label='Paste', command=notdone, underline=0) edit.add_separator() top.add_cascade(label='Edit', menu=edit, underline=0) submenu = Menu(edit, tearoff=0) submenu.add_command(label='A', command=win.quit, underline=0) submenu.add_command(label='B', command=notdone, underline=0) edit.add_cascade(label='Stuff', menu=submenu, underline=0) if __name__ == '__main__': root = Tk() root.title('menu_win') makemenu(root) msg = Label(root, text='Window menu basics') msg.pack(expand=YES, fill=BOTH) msg.config(relief=SUNKEN, width=40, height=7, bg='beige') root.mainloop()
3 popup windows with menus
from Tkinter import * def notdone(): showerror('Not implemented', 'Not yet available') def makemenu(win): top = Menu(win) win.config(menu=top) file = Menu(top) file.add_command(label='New...', command=notdone, underline=0) file.add_command(label='Open...', command=notdone, underline=0) file.add_command(label='Quit', command=win.quit, underline=0) top.add_cascade(label='File', menu=file, underline=0) edit = Menu(top, tearoff=0) edit.add_command(label='Cut', command=notdone, underline=0) edit.add_command(label='Paste', command=notdone, underline=0) edit.add_separator() top.add_cascade(label='Edit', menu=edit, underline=0) submenu = Menu(edit, tearoff=0) submenu.add_command(label='Spam', command=win.quit, underline=0) submenu.add_command(label='Eggs', command=notdone, underline=0) edit.add_cascade(label='Stuff', menu=submenu, underline=0) root = Tk() for i in range(3): win = Toplevel(root) makemenu(win) Label(win, bg='black', height=5, width=15).pack(expand=YES, fill=BOTH) Button(root, text="Bye", command=root.quit).pack() root.mainloop()