[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

Problem with TkMenu::add_cascade

Matthias Ludwig

9/26/2006 7:13:00 AM

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



5 Answers

Paul Lutus

9/26/2006 9:05:00 AM

0

matthias@kl-mailer.de wrote:

> Hi list,
>
> i'm working on gui using ruby/tk.

Any reason you aren't using Qt? I don't want to sound like a broken record
here, but Qt's documentation is much better than for Tk, the apps look
better, and so forth.

> 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

How about a complete example, with headers, so we can test the code?

--
Paul Lutus
http://www.ara...

Bengt Dahlqvist

9/26/2006 10:42:00 AM

0

matthias@kl-mailer.de 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?


Morton Goldberg

9/26/2006 1:54:00 PM

0

On Sep 26, 2006, at 3:12 AM, matthias@kl-mailer.de wrote:

> 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



Hidetoshi NAGAI

9/26/2006 6:23:00 PM

0

Matthias Ludwig

9/27/2006 10:13:00 AM

0

> 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