[Tkinter-discuss] How do I identify which menu item has bee selected?
Guilherme Polo
ggpolo at gmail.com
Wed Aug 19 15:32:01 CEST 2009
2009/8/19 thicket <mark_eastwood at ntlworld.com>:
>
> I have a
> 'partial' solution to what I'm trying to achieve (code snippet below)
> .........
>
> The issue is that all the 'Actions' after and including Stock/Order history
> will display the same sub-menu (self.mnth_mu).
>
> The code as it stands enables me to identify which month has been selected
> for a particular 'Action' but not which 'Action' it refers to i.e. works
> fine if self.mnth.mu is used only once.
>
Well, my real suggestion would be to change this application. Don't
you think it is weird that when you select a month for a specific
action, all the other actions will have the same month selected ? How
can you know which one is active by looking in the menus ? Even if you
changed it to have multiple tcl variables, you still wouldn't know
which exact thing is active.
Nevertheless, I gave it a try and the code is below. It does create a
new menu for each action, but it is just about the same effort of
creating a single one.
import Tkinter
root = Tkinter.Tk()
def test(action):
def cb():
print month_var.get(), action
return cb
def create_month_menu(action):
month_menu = Tkinter.Menu(action_menu, tearoff=False)
for month in ('Jan', 'Feb', 'Mar'):
month_menu.add_radiobutton(label=month, variable=month_var,
command=test(action))
return month_menu
menu = Tkinter.Menu(tearoff=False)
action_menu = Tkinter.Menu(menu, tearoff=False)
month_var = Tkinter.StringVar()
for action in ('A1', 'A2'):
action_menu.add_cascade(label=action, menu=create_month_menu(action))
menu.add_cascade(label='Actions', menu=action_menu)
root['menu'] = menu
root.mainloop()
--
-- Guilherme H. Polo Goncalves
More information about the Tkinter-discuss
mailing list