467,879 Members | 1,242 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 467,879 developers. It's quick & easy.

tkinter menu bar problem

I have a menu bar in a top level window as follows

menuBar = Menu(rootWin)
menuBar.add_command( label='Quit', command=rootWin.quit)

configMenu = Menu(menuBar, tearoff=0)
configMenu.add_command(label='Left Device Raw', command=setLeftRaw)
configMenu.add_command(label='Right Device Raw', command=setRightRaw)
etc

menuBar.add_cascade(label='Config', menu=configMenu)

rootWin.config(menu=menuBar)

Q1 Cannot find a way of changing the menu bars background colour. When
colour options are accepted they seem to be ignored. Is this a native look
and feel characteristic of write once run anywhere, not yet implemented or
possibly a bug.

Q2 Some of the menu options in the config menu will not always be available
depending on program state. How can individual items in such a menu be
turned to faint gey to indicate their unavailability. Also a tick mark
against an item would be useful to show the currently selected option. Is
this possible?

Regards,
John Pote

System: Win XP, Python 2.3.4

Jul 18 '05 #1
  • viewed: 4541
Share:
3 Replies
On Wed, 09 Feb 2005 11:35:40 GMT, John Pote <jo******@blueyonder.co.uk>
wrote:
I have a menu bar in a top level window as follows [snip code]
Q1 Cannot find a way of changing the menu bars background colour. When
colour options are accepted they seem to be ignored. Is this a native
look
and feel characteristic of write once run anywhere, not yet implemented
or
possibly a bug.
Even if the tk man pages [1] don't mention it, it would not be surprising
if the background option for menu items did not work on Windows, since
many things seem to be "hardcoded" on this platform. I tested the
following code on Linux; it works without problem and has the expected
behaviour:
from Tkinter import *
root = Tk()
mb = Menu(root)
root.configure(menu=mb)
m = Menu(mb)
mb.add_cascade(label='Menu', menu=m)
m.add_command(label='Quit', command=root.quit, background='red')


If it is what you did and if it doesn't work on Windows, it is likely that
the background option for menu items is not supported for this platform...
Q2 Some of the menu options in the config menu will not always be
available
depending on program state. How can individual items in such a menu be
turned to faint gey to indicate their unavailability. Also a tick mark
against an item would be useful to show the currently selected option. Is
this possible?


To "grey out" a menu item:

parentMenu.entryconfigure(itemIndex, state=DISABLED)

To have menu items with a check-mark, use the add_checkbutton or
add_radiobutton methods on the parent menu. Their use is similar to the
Checkbutton and Radiobutton classes. See [1] for all available options.

[1] http://www.tcl.tk/man/tcl8.4/TkCmd/menu.htm
- Eric Brunel -
Jul 18 '05 #2
On Wed, 09 Feb 2005 11:35:40 GMT, John Pote <jo******@blueyonder.co.uk>
wrote:
I have a menu bar in a top level window as follows [snip code]
Q1 Cannot find a way of changing the menu bars background colour. When
colour options are accepted they seem to be ignored. Is this a native
look
and feel characteristic of write once run anywhere, not yet implemented
or
possibly a bug.
Even if the tk man pages [1] don't mention it, it would not be surprising
if the background option for menu items did not work on Windows, since
many things seem to be "hardcoded" on this platform. I tested the
following code on Linux; it works without problem and has the expected
behaviour:
from Tkinter import *
root = Tk()
mb = Menu(root)
root.configure(menu=mb)
m = Menu(mb)
mb.add_cascade(label='Menu', menu=m)
m.add_command(label='Quit', command=root.quit, background='red')


If it is what you did and if it doesn't work on Windows, it is likely that
the background option for menu items is not supported for this platform...
Q2 Some of the menu options in the config menu will not always be
available
depending on program state. How can individual items in such a menu be
turned to faint gey to indicate their unavailability. Also a tick mark
against an item would be useful to show the currently selected option. Is
this possible?


To "grey out" a menu item:

parentMenu.entryconfigure(itemIndex, state=DISABLED)

To have menu items with a check-mark, use the add_checkbutton or
add_radiobutton methods on the parent menu. Their use is similar to the
Checkbutton and Radiobutton classes. See [1] for all available options.

[1] http://www.tcl.tk/man/tcl8.4/TkCmd/menu.htm
- Eric Brunel -
Jul 18 '05 #3
Thanks for the reply. I now have radio buttons (with a nice tick!) on my
menu that can be greyed out when disabled. I can also change the background
colour of the individual buttons as you suggest.

What I cannot do is change the background colour of the menu bar itself. The
following code is accepted but the menu bar background stays resolutely
light grey rather than light blue.

rootWin = Tk()
menuBar = MenuBar(rootWin, background='light blue')
menuBar.insert_cascade(MenuBar.CONFIG, label='Config', menu=configMenu,
background='light blue')

The background options are being ignored and the window retains its standard
windows colour scheme which I assume is overriding the background colour
option. I guess my normal windows colour scheme (classic windows!) is not so
bad and life is too short to tinker with this any more.

Thanks again
John Pote

"Eric Brunel" <er*********@despammed.com> wrote in message
news:op**************@eb.pragmadev...
On Wed, 09 Feb 2005 11:35:40 GMT, John Pote <jo******@blueyonder.co.uk>
wrote:
I have a menu bar in a top level window as follows

[snip code]

Q1 Cannot find a way of changing the menu bars background colour. When
colour options are accepted they seem to be ignored. Is this a native
look
and feel characteristic of write once run anywhere, not yet implemented
or
possibly a bug.


Even if the tk man pages [1] don't mention it, it would not be surprising
if the background option for menu items did not work on Windows, since
many things seem to be "hardcoded" on this platform. I tested the
following code on Linux; it works without problem and has the expected
behaviour:
from Tkinter import *
root = Tk()
mb = Menu(root)
root.configure(menu=mb)
m = Menu(mb)
mb.add_cascade(label='Menu', menu=m)
m.add_command(label='Quit', command=root.quit, background='red')


If it is what you did and if it doesn't work on Windows, it is likely that
the background option for menu items is not supported for this platform...
Q2 Some of the menu options in the config menu will not always be
available
depending on program state. How can individual items in such a menu be
turned to faint gey to indicate their unavailability. Also a tick mark
against an item would be useful to show the currently selected option. Is
this possible?


To "grey out" a menu item:

parentMenu.entryconfigure(itemIndex, state=DISABLED)

To have menu items with a check-mark, use the add_checkbutton or
add_radiobutton methods on the parent menu. Their use is similar to the
Checkbutton and Radiobutton classes. See [1] for all available options.

[1] http://www.tcl.tk/man/tcl8.4/TkCmd/menu.htm
- Eric Brunel -

Jul 18 '05 #4

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

2 posts views Thread by James Ash | last post: by
1 post views Thread by Eric Brunel | last post: by
6 posts views Thread by Richard Lewis | last post: by
reply views Thread by Stewart Midwinter | last post: by
2 posts views Thread by Andrew Trevorrow | last post: by
2 posts views Thread by Doran, Harold | last post: by
1 post views Thread by viv1tyagi | last post: by
3 posts views Thread by joshdw4 | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.