[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Tkmenubar and checkbuttons

Joe Van Dyk

5/5/2005 8:10:00 AM

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.

Thanks,
Joe



4 Answers

Hidetoshi NAGAI

5/5/2005 8:58:00 AM

0

Hidetoshi NAGAI

5/5/2005 2:17:00 PM

0

Joe Van Dyk

5/5/2005 5:31:00 PM

0

On 5/5/05, Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp> wrote:
> From: Joe Van Dyk <joevandyk@gmail.com>
> Subject: Tkmenubar and checkbuttons
> Date: Thu, 5 May 2005 17:10:29 +0900
> Message-ID: <c715e64050505011044a55b21@mail.gmail.com>
> > 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



Joe Van Dyk

5/5/2005 5:43:00 PM

0

On 5/5/05, Joe Van Dyk <joevandyk@gmail.com> wrote:
> On 5/5/05, Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp> wrote:
> > From: Joe Van Dyk <joevandyk@gmail.com>
> > Subject: Tkmenubar and checkbuttons
> > Date: Thu, 5 May 2005 17:10:29 +0900
> > Message-ID: <c715e64050505011044a55b21@mail.gmail.com>
> > > 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.
>

I got it to work the way I originally wanted, see below:

require 'tk'

m = nil # variable to pass the menu object to procedures

map_st = TkVariable.new
spec = [
['Option',

['Display Map', map_st, nil, nil,
{:command => proc {if map_st.value=="1"
show_map
else
hide_map
end}}],
]
]

def show_map
puts "showing map"
end

def hide_map
puts "hiding_map"
end
# add menubar and get the cascade menu object
m = Tk.root.add_menubar(spec).entrycget('Option', :menu)

Tk.mainloop



Thanks to the both of you!
Joe