Problem with TkMenu::add_cascade

M

matthias

Hi list,

i'm working on gui using ruby/tk.
Everything went fine (exept the poor documentation), but now i have a
problem with submenus. A small example-code to demonstrate the issue:

menu = TkMenu.new
menu.add_command('label' => 'Foo', 'command' => lambda { p "foo" })
sub = TkMenu.new
sub.add_command('label' => 'Bar', 'command' => lambda { p "bar" })
menu.add_cascade('label' => 'submenu', 'menu' => sub)

canvas = TkCanvas.new
canvas.bind('1') {|e| menu.popup e.x_root, e.y_root}
canvas.pack

Tk.mainloop

The code works nearly as expected, menu appears an has correct content.
If i click on "Foo", text "foo" is written to the console, but if i
click on
"Bar" nothing happens :(
Any idea what's going wrong?

Ruby: ruby 1.8.5 (2006-08-25) [i486-linux]
Linux: Linux version 2.6.12 (root@louipaz) (gcc version 3.3.6 (Debian
1:3.3.6-13))

thanks a lot,
Matthias
 
B

Bengt Dahlqvist

(e-mail address removed) skrev:
Hi list,

i'm working on gui using ruby/tk.
Everything went fine (exept the poor documentation), but now i have a
problem with submenus. A small example-code to demonstrate the issue:

menu = TkMenu.new
menu.add_command('label' => 'Foo', 'command' => lambda { p "foo" })
sub = TkMenu.new
sub.add_command('label' => 'Bar', 'command' => lambda { p "bar" })
menu.add_cascade('label' => 'submenu', 'menu' => sub)

canvas = TkCanvas.new
canvas.bind('1') {|e| menu.popup e.x_root, e.y_root}
canvas.pack

Tk.mainloop

The code works nearly as expected, menu appears an has correct content.
If i click on "Foo", text "foo" is written to the console, but if i
click on
"Bar" nothing happens :(
Any idea what's going wrong?

Ruby: ruby 1.8.5 (2006-08-25) [i486-linux]
Linux: Linux version 2.6.12 (root@louipaz) (gcc version 3.3.6 (Debian
1:3.3.6-13))

thanks a lot,
Matthias
Tested your code (just added require 'tk' as first line) with
Ruby 1.8.5 on WinXP and Active State Tcl 8.4.13.

No problem, works fine, both "foo" and "bar" printed as
they should. Maybe your Tcl needs updating?
 
M

Morton Goldberg

Hi list,

i'm working on gui using ruby/tk.
Everything went fine (exept the poor documentation), but now i have a
problem with submenus. A small example-code to demonstrate the issue:

menu = TkMenu.new
menu.add_command('label' => 'Foo', 'command' => lambda { p "foo" })
sub = TkMenu.new
sub.add_command('label' => 'Bar', 'command' => lambda { p "bar" })
menu.add_cascade('label' => 'submenu', 'menu' => sub)

canvas = TkCanvas.new
canvas.bind('1') {|e| menu.popup e.x_root, e.y_root}
canvas.pack

Tk.mainloop

The code works nearly as expected, menu appears an has correct
content.
If i click on "Foo", text "foo" is written to the console, but if i
click on
"Bar" nothing happens :(
Any idea what's going wrong?

Ruby: ruby 1.8.5 (2006-08-25) [i486-linux]
Linux: Linux version 2.6.12 (root@louipaz) (gcc version 3.3.6 (Debian
1:3.3.6-13))

No problem with your code on my box -- Mac OS X 10.4, ruby 1.8.2.

Regards, Morton
 
H

Hidetoshi NAGAI

From: (e-mail address removed)
Subject: Problem with TkMenu::add_cascade
Date: Tue, 26 Sep 2006 16:12:32 +0900
Message-ID: said:
The code works nearly as expected, menu appears an has correct content.
If i click on "Foo", text "foo" is written to the console, but if i
click on
"Bar" nothing happens :(
Any idea what's going wrong?

Ruby: ruby 1.8.5 (2006-08-25) [i486-linux]
Linux: Linux version 2.6.12 (root@louipaz) (gcc version 3.3.6 (Debian
1:3.3.6-13))

That is NOT a bug of Ruby/Tk. Tcl/Tk will give you a same result.
Probably, your trouble depends on the relationship between the
menu and the cascade menu.
Please try to make the cascade menu as a daughter of the menu
(e.g. "sub = TkMenu.new(menu)").
^^^^
 
M

Matthias Ludwig

That is NOT a bug of Ruby/Tk. Tcl/Tk will give you a same result.
Probably, your trouble depends on the relationship between the
menu and the cascade menu.
Please try to make the cascade menu as a daughter of the menu
(e.g. "sub = TkMenu.new(menu)").
^^^^

That's it, thanks a lot!

One thing i noticed while testing:
it also depends on the windowmanager. On KDE (for example) the "bad"
code works fine, on fluxbox it doesn't...

best regards,
Matthias
 

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,770
Messages
2,569,584
Members
45,075
Latest member
MakersCBDBloodSupport

Latest Threads

Top