Ruby/Tk

G

graycardinalster

Hi !

I have a trouble.
###
require "tk"

class Main
def initialize
@root = TkRoot.new { title "prog" }

top = TkToplevel.new
@edit = TkEntry.new(top) {
pack
}

cmd = proc { puts @edit.get }

button = TkButton.new(@root) {
pack
text ""
command cmd
}

top.grab
Tk.mainloop
end
end

m = Main.new
###
How to get @edit value after "top" is closed ?
 
D

Diego Virasoro

How to get @edit value after "top" is closed ?

If I remember correctly you need to use @edit.value
 
H

Hidetoshi NAGAI

From: "(e-mail address removed)" <[email protected]>
Subject: Ruby/Tk
Date: Fri, 15 May 2009 23:45:07 +0900
Message-ID: said:
How to get @edit value after "top" is closed ?

One of the simple solution is to use a TkVariable and
'textvariable' option of an entry widget.
 
H

Hidetoshi NAGAI

From: Oleg Igor <[email protected]>
Subject: Re: Ruby/Tk
Date: Sun, 17 May 2009 18:55:47 +0900
Message-ID: said:
I not found -textvariable options in TkText :(

If you use Tcl/Tk8.5, Tk::Text::peer widget is useful.
----------------------------------------------------------------------
txt = Tk::Text.new # A base text widget.
# In this case, it isn't shown on the GUI.

top = Tk::Toplevel.new
peer = Tk::Text::peer.new(txt, top).pack
# A peer widget of 'txt' widget. Its parent is 'top' widget.

# ... destroy 'top' widget ...

p txt.value # This is the same content with the destroyed peer.
----------------------------------------------------------------------

If you use Tcl/Tk8.4 or the former version,
you can "withdraw" the dialog instead of "destroy".
----------------------------------------------------------------------
top = Tk::Toplevel.new
txt = Tk::Text.new(top).pack
@value = ""
top.protocol('WM_DELETE_WINDOW'){ top.withdraw; @value = txt.value }
# Ignore 'WM_DELETE_WINDOW' protocol (e.g. when click the 'delete'
# button on the window frame) from a window manager.
# In this case, withdraw the toplevel widget instead of destroy it.

# ... withdraw the toplevel ...

p @value

top.deiconify # Display the toplevel widget in normal form.
----------------------------------------------------------------------

Or, get value before destroying the toplevel.
----------------------------------------------------------------------
top = Tk::Toplevel.new
txt = Tk::Text.new(top).pack
@value = ""
top.protocol('WM_DELETE_WINDOW'){ @value = txt.value; top.destroy }

# ... destroy the toplevel ...

p @value
 

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

Similar Threads


Members online

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,054
Latest member
TrimKetoBoost

Latest Threads

Top