Forum: Ruby ruby and Tk:- Menu's calling other widgets

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
508861510639b56d61eb30e6a28b01d9?d=identicon&s=25 John Maclean (Guest)
on 2006-01-24 19:15
(Received via mailing list)
What's the best (and simplest) method of having a menu item produce
another widget (a menu for example)? So far I have code as shown below
which calls a simple button. I'd like to use the proc{foo}  method so
that I can call another file. The idea is to have each type of widget
organised into many smaller files.

It the proc{require 'another_widget'} way possible or recommended?

here's a menu entry that calls another widget....


    [['Blah', 0],
        ['command', proc {
          toplevelwindow = TkToplevel.new(root) {
            title "New window"
            #geometry("50x50+100+100")
            #configure('bg'=>"black")
          }

         toplevelbutton = TkButton.new(toplevelwindow) {
           text "Close"
           command proc { toplevelwindow.destroy }
         }.place('x'=>10, 'y'=>10)
       }],
       ],
    [['Blah', 0],
        ['command', proc {
          toplevelwindow = TkToplevel.new(root) {
            title "New window"
            #geometry("50x50+100+100")
            #configure('bg'=>"black")
          }

         toplevelbutton = TkButton.new(toplevelwindow) {
           text "Close"
           command proc { toplevelwindow.destroy }
         }.place('x'=>10, 'y'=>10)
       }],
       ],
E24dee41b2fcaff084d11bb928dba23d?d=identicon&s=25 Gerald Murray (Guest)
on 2006-01-24 23:30
(Received via mailing list)
An example is in the ruby source distribution:
ruby-1.8.4/ext/tk/sample/demos-en/widget

best regards,
Gerald

If you only want buttons you might try:

require 'tk'
  #= windowmaker - create button array, each pops a window
  #global $button[] holds buttons defined by this method
  #parm root    the frame which is to hold the button
  #parm b_text  the button text; also becomes toplevel title
  #parm t_place String, "0x0+100+200", toplevel window size, place
  #parm init_color String, "#000000", 2 hex digits for red, green, blue
  #
  def windowmaker(root,b_text,t_place,init_color="#000000")
    toplevelwindow = -1
    b = TkButton.new(root,
      'text'=>b_text,
      'command'=> proc {
          toplevelwindow = TkToplevel.new(root, {
            'title'=> "#{b.text}",
            'geometry'=>t_place,
            'bg'=>init_color
          })
      }
    ).pack('expand'=>'yes','fill'=>'x')
    $buttons.push [b,toplevelwindow]
  end

r = TkRoot.new
f = TkFrame.new(r)
$buttons = [] # each entry holds [button,toplevel]
windowmaker(f,"red","100x100","#ff0000")
windowmaker(f,"white","200x200","#ffffff")
windowmaker(f,"blue","300x300","#0000ff")
windowmaker(f,"0x400+100+100","dummy") # re-configured:
# show reconfiguration of the last button
$buttons[-1][0].configure('command'=>proc{r.destroy;
exit},'text'=>"Quit")
f.pack
Tk.mainloop
E4f967492dbd03c526cc9b397e68021d?d=identicon&s=25 Hidetoshi NAGAI (Guest)
on 2006-01-25 03:19
(Received via mailing list)
From: John Maclean <info@jayeola.org>
Subject: ruby and Tk:- Menu's calling other widgets
Date: Wed, 25 Jan 2006 03:13:34 +0900
Message-ID: <20060125181233.5f308f41@localhost.localdomain>
> that I can call another file. The idea is to have each type of widget
> organised into many smaller files.
>
> It the proc{require 'another_widget'} way possible or recommended?

It must be possible, but I don't recommend it.
If your each type of widget is a class,
'autoload' may be a good solution.
Please see some libraries in '<ruby-libs>/tkextlib/' directory
(e.g. 'tkextlib/iwidgets.rb' and files in 'textlib/iwidgets/').
508861510639b56d61eb30e6a28b01d9?d=identicon&s=25 John Maclean (Guest)
on 2006-01-25 03:40
(Received via mailing list)
Thank you Chaps,

I've managed to get it going with proc{load 'fo.rb'}. I know that it
may be "bad practice" but I'd like to cut my teeth into a certain
project.

On Wed, 25 Jan 2006 11:16:34 +0900 Hidetoshi NAGAI
This topic is locked and can not be replied to.