Tkmenubar and checkbuttons

J

Joe Van Dyk

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
 
H

Hidetoshi NAGAI

From: Joe Van Dyk <[email protected]>
Subject: Tkmenubar and checkbuttons
Date: Thu, 5 May 2005 17:10:29 +0900
Message-ID: said:
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.

I'm very sorry.
Is the following the one of the samples which you want?
---------------------------------------------------
map_st = TkVariable.new

:

['Options',
['Display Map', map_st, nil, nil, {:command=>proc{show_map()}}],
['Hide Map', map_st, nil, nil, {:command=>proc{hide_map()}}]
]
 
H

Hidetoshi NAGAI

From: Joe Van Dyk <[email protected]>
Subject: Tkmenubar and checkbuttons
Date: Thu, 5 May 2005 17:10:29 +0900
Message-ID: said:
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
 
J

Joe Van Dyk

From: Joe Van Dyk <[email protected]>
Subject: Tkmenubar and checkbuttons
Date: Thu, 5 May 2005 17:10:29 +0900
Message-ID: said:
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

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
 
J

Joe Van Dyk

From: Joe Van Dyk <[email protected]>
Subject: Tkmenubar and checkbuttons
Date: Thu, 5 May 2005 17:10:29 +0900
Message-ID: said:
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

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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,537
Members
45,022
Latest member
MaybelleMa

Latest Threads

Top