From: “Harry T.” [email protected]
Subject: Ruby TK GUI question
Date: Sat, 18 Feb 2006 01:57:00 +0900
Message-ID: [email protected]
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