Forum: Ruby Ruby TK GUI question

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.
Harry T. (Guest)
on 2006-02-17 19:00
(Received via mailing list)
Hi,

I am writing a Ruby GUI TK application where the top-most portion of the
screen is a line of static menu buttons. I would like the remaining
lower
portion of the screen to be dynamic - as an example, one of the top
static
buttons is pressed, in response to that, another window appears in the
dynamic area where someone can press more buttons, someone presses on of
those, which then draws a data window, erasing the window which had the
buttons, then someone closes the data window which brings the user back
to
the window which was drawn in response to the button press from the
static
button in the top portion of the screen.

Any references to Ruby TK function names would be greatly appreciated.

Thanks,

Harry
unknown (Guest)
on 2006-02-17 20:34
(Received via mailing list)
> button in the top portion of the screen.
>
> Any references to Ruby TK function names would be greatly appreciated.
>
> Thanks,
>
> Harry
>

Are you looking for a new window that you can move around, or one
embedded
in your dynamic menu?

You can use TkTopLevel for a new window.  If you want it embedded, there
are a few attributes you could use with pack or grid.  "before" will let
you insert a widget before a specified widget.   "after" does the
opposite.  You can use the forget method to remove it from the packing
order when you are done.
Hidetoshi NAGAI (Guest)
on 2006-02-20 11:56
(Received via mailing list)
From: "Harry T." <removed_email_address@domain.invalid>
Subject: Ruby TK GUI question
Date: Sat, 18 Feb 2006 01:57:00 +0900
Message-ID: <200602171156918.SM03060@htruax>
> I am writing a Ruby GUI TK application where the top-most portion of the
> screen is a line of static menu buttons. I would like the remaining lower
> portion of the screen to be dynamic - as an example, one of the top static
> buttons is pressed, in response to that, another window appears in the
> dynamic area where someone can press more buttons, someone presses on of
> those, which then draws a data window, erasing the window which had the
> buttons, then someone closes the data window which brings the user back to
> the window which was drawn in response to the button press from the static
> button in the top portion of the screen.

Is the one which you want like as the following?

====< example >====================================================
require 'tk'

root = Tk.root
root.overrideredirect(true)

root.bind('Visibility'){root.raise}  # keep on top
root.bind('Configure'){
  root.geometry("#{root.winfo_screenwidth}x#{root.winfo_reqheight}+0+0")
}

def create_toplevel(btn)
  btn.state(:disabled)
  begin
    top = TkToplevel.new
    top.bind('Destroy'){btn.state(:normal)}
    top
  rescue => e
    top.destroy if top
    btn.state(:normal)
    fail e
  end
end

def msg_window(btn, msg)
  top = create_toplevel(btn)
  TkLabel.new(top, :text=>msg).pack(:padx=>10, :pady=>5)
  TkButton.new(top, :text=>'close', :command=>proc{top.destroy}).pack
end

f = TkFrame.new.pack(:side=>:left)

TkLabel.new(f, :text=>'  launcher window  ').pack(:side=>:left)

TkButton.new(f, :text=>'foo'){|b|
  command{msg_window(b, 'foo')}
}.pack(:side=>:left)

TkButton.new(f, :text=>'bar'){|b|
  command{msg_window(b, 'bar')}
}.pack(:side=>:left)

TkButton.new(f, :text=>'baz'){|b|
  command{msg_window(b, 'baz')}
}.pack(:side=>:left)


TkButton.new(:text=>'quit', :command=>proc{exit}).pack(:side=>:right)

Tk.mainloop
===================================================================
This topic is locked and can not be replied to.