[Tutor] Tkinter Menus

Jorge Louis de Castro jobauk at hotmail.com
Tue Aug 9 18:06:48 CEST 2005


Got it!

Because 'menu' is a config option of the top level window's config but not 
of 'Frame', It's just a matter of calling self.master.config(menu=menu)

Thanks
j.

>From: Kent Johnson <kent37 at tds.net>
>To: Python Tutor <tutor at python.org>
>Subject: Re: [Tutor] Tkinter Menus
>Date: Tue, 09 Aug 2005 07:39:35 -0400
>
>Jorge Louis De Castro wrote:
> > Hello,
> >
> > I'm having this issue with Tkinter. I have a frame with all my buttons,
> > checkboxes et al, and all is working fine. I want to add menus and added 
>the
> > following to my frame (fCanvas) code:
> >
> >     # create a toplevel menu
> >     menu = Menu(fCanvas)
> >     fCanvas.config(menu=menu)
> >     # create a pulldown menu, and add it to the menu bar
> >     filemenu = Menu(menu, tearoff=0)
> >     filemenu.add_command(label="Open", command=self.doBrowse)
> >     filemenu.add_separator()
> >     filemenu.add_command(label="Exit", command=self.doQuit)
> >     menu.add_cascade(label="File", menu=filemenu)
> >     # create analyze pulldown menu
> >     analyzemenu = Menu(menu, tearoff=0)
> >     analyzemenu.add_command(label="Start", command=self.doStart)
> >     analyzemenu.add_command(label="Reset", command=self.doReset)
> >     menu.add_cascade(label="Analyze", menu=analyzemenu)
> >     # create about pulldown menu
> >     aboutmenu = Menu(menu, tearoff=0)
> >     menu.add_cascade(label="About", menu=aboutmenu)
> >
> > Gives me the error:
> > Traceback (most recent call last):
> >   File "C:\Workplace\python\im_logparser\msn_parser_gui.py", line 203, 
>in ?
> >     myApp = LogAnalyzerGUI()
> >   File "C:\Workplace\python\im_logparser\msn_parser_gui.py", line 11, in
> > __init__
> >     self.buildUI()
> >   File "C:\Workplace\python\im_logparser\msn_parser_gui.py", line 35, in
> > buildUI
> >     fCanvas.config(menu=menu)
> >   File "C:\Python24\Lib\lib-tk\Tkinter.py", line 1139, in configure
> >     return self._configure('configure', cnf, kw)
> >   File "C:\Python24\Lib\lib-tk\Tkinter.py", line 1130, in _configure
> >     self.tk.call(_flatten((self._w, cmd)) + self._options(cnf))
> > TclError: unknown option "-menu"
> >
> >
> > Unless I replace the menu creation from using my frame to using the 
>root:
> >
> > root = Tk()
> > menu = Menu(root)
> > root.config(menu=menu)
> >
> > But this obviously creates another window which is not what I want at 
>all.
> > Any thoughts?
>
>You don't show what fCanvas is...are you creating a Toplevel window? If you 
>just want one window with a menubar you can add your widgets directly to 
>root. Here is a simple example:
>
>from Tkinter import *
>
>def callback(code):
>     print "called the callback with code", code
>
>root = Tk()
>
>w=Label(root,text="Hello!!")
>w.pack()
>b=Button(root,text="Bye",command='exit')
>b.pack()
>
># 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=lambda: callback('New'))
>filemenu.add_command(label="Open...", command=lambda: callback('Open'))
>filemenu.add_separator()
>filemenu.add_command(label="Exit", command='exit')
>
>mainloop()
>
>Kent
>
>_______________________________________________
>Tutor maillist  -  Tutor at python.org
>http://mail.python.org/mailman/listinfo/tutor




More information about the Tutor mailing list