From: Joe Van Dyk Date: 2005-05-06T02:30:33+09:00 Subject: Re: Tkmenubar and checkbuttons On 5/5/05, Hidetoshi NAGAI wrote: > From: Joe Van Dyk > Subject: Tkmenubar and checkbuttons > Date: Thu, 5 May 2005 17:10:29 +0900 > Message-ID: > > I have this snippet as part of my Tk menu bar spec: > > > > ['Options', > > ['Display Map', proc {show_map()}], > > ['Hide Map', proc {hide_map()}] > > > > How can I combine those two menu options into a single checkbutton > > menu option? The API documentation on it wasn't clear at all. > > Maybe, do you want such like as the following? > ---------------------------------------------------------- > require 'tk' > > m = nil # variable to pass the menu object to procedures > > spec = [ > ['Option', > > # define a command entry by Hash > { > :type=>'command', > :label=>'Display Map', > :command=>proc{ > show_map() > m.entryconfigure('Display Map', :state=>:disabled) > m.entryconfigure('Hide Map', :state=>:normal) > }, > :state=>:normal > }, > > # define a command entry by Array > ['Hide Map', > proc{ > hide_map() > m.entryconfigure('Display Map', :state=>:normal) > m.entryconfigure('Hide Map', :state=>:disabled) > }, > nil, nil, > {:state=>:disabled} > ] > ] > ] > > # add menubar and get the cascade menu object > m = Tk.root.add_menubar(spec).entrycget('Option', :menu) > > Tk.mainloop > ---------------------------------------------------------- > -- > Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) > > Thanks for the example. That's close to what I originally wanted and will probably work well enough. Just to clarify, what I originally wanted was to be able to have a single menu entry in the menu. The menu entry should be a check button with the text "Display Map" next to it. When the menu checkbox is activated, it should call #show_map. When the checkbox is inactivated, it should call #hide_map. Thanks, Joe