Binding or executing a command with a TkOptionMenubutton


#1

I want my program to execute a command whenever a new selection is made
from a TkOptionMenubutton. The -command option isn’t allowed with
TkOptionMenubuttons, so I’ve been experimenting with various bindings,
but can’t find an appropriate binding event.

I’ve tried the following simple example which should print the value of
the selection, but it only works if the mouse is directly over the
button itself, and not over the expanded options.

Any ideas how to do this?

#------------------------------------
require ‘tk’
root = TkRoot.new.title(“MenuOptionbutton”)

list = [“1”, “2”, “3”, “4”, “5”]
var = TkVariable.new
button = TkOptionMenubutton.new(root,var,*list).pack
button.bind(‘ButtonRelease-1’) do
print var, “\n”
end

Tk.mainloop

#--------------------------------------------


#2

From: Alex DeCaria removed_email_address@domain.invalid
Subject: Binding or executing a command with a TkOptionMenubutton
Date: Fri, 16 Mar 2007 22:13:22 +0900
Message-ID: removed_email_address@domain.invalid

I’ve tried the following simple example which should print the value of
the selection, but it only works if the mouse is directly over the
button itself, and not over the expanded options.

Any ideas how to do this?

For example,

require ‘tk’
root = TkRoot.new.title(“MenuOptionbutton”)

list = [“1”, “2”, “3”, “4”, “5”]
var = TkVariable.new
button = TkOptionMenubutton.new(root,var,*list).pack
menu = button.menu
menu.bind(‘ButtonRelease-1’, ‘@%y’){|y|
value = menu.entrycget(y, :value)
print var, ’ -> ', value, “\n”
}

OR,

#menu.bind(‘ButtonRelease-1’, ‘%y’){|y|

value = menu.entrycget("@#{y}", :value)

print var, ’ -> ', value, “\n”

#}

Tk.mainloop