Passing the data from a tkEntry widgit to a variable

M

Mer Gilmartin

I'm a bit confused about this,
when you create a TkEntry Widgit on a frame
How exactly do you put the data entered into a variable?

I want it passed when the user clicks a button.

So I was looking at examples and it seemed to say that along
with passing the frame name, i should pass a textvariable linked
too a variable. But thats just throwing errors.

I was looking at examples that seem to bind the data but i was
having difficulty figuring out what they were passing.

Could I bother someone to explain it briefly. I want to be able to
understand it to make sure I can do this.
 
M

Mer Gilmartin

Ok.
Sample code for other newbies.

@mytext = TkVariable.new('hi this is a test')
testtwo = TkEntry.new(Frameone, 'textvariable'=> @mytext)
{
puts value
}

Value outputs whats been passed to the TkEntry widgit.
I think.

Binding I think will allow data into the widgit
so possibility into the variable. But I havent got that far yet.
 
H

Hidetoshi NAGAI

From: Mer Gilmartin <[email protected]>
Subject: Re: Passing the data from a tkEntry widgit to a variable
Date: Sat, 14 Oct 2006 00:01:34 +0900
Message-ID: said:
Sample code for other newbies.

@mytext = TkVariable.new('hi this is a test')
testtwo = TkEntry.new(Frameone, 'textvariable'=> @mytext)
{
puts value
}

Value outputs whats been passed to the TkEntry widgit.
I think.

----<sample 1>--------------------------------------
mytext = @mytext = TkVariable.new('hi this is a test')
testtwo = TkEntry.new(Frameone, 'textvariable'=> @mytext)
{
# self is the TkEntry widget
self.bind('Button-1'){puts mytext.value}
}
----------------------------------------------------

----<sample 2>--------------------------------------
testtwo = TkEntry.new(Frameone)
{
self.value = 'hi this is a test'
self.bind('Button-1'){puts self.value}
}
----------------------------------------------------

----<sample 3>--------------------------------------
@mytext = 'hi this is a test'
testtwo = TkEntry.new(Frameone)
testtwo.value = @mytext
testtwo.bind('Button-1'){@mytext = testtwo.value; puts @mytext}
----------------------------------------------------

----<sample 4>--------------------------------------
@mytext = 'hi this is a test'
testtwo = TkEntry.new(Frameone)
testtwo.value = @mytext
callback = proc{@mytext = testtwo.value; puts @mytext}
testtwo.bind('Button-1', callback)
testtwo.bind('Return', callback)
----------------------------------------------------

----<sample 5>--------------------------------------
@mytext = 'hi this is a test'
testtwo = TkEntry.new(Frameone)
testtwo.value = @mytext
ev = TkVirtualEvent.new('Button-1', 'Return')
testtwo.bind(ev){@mytext = testtwo.value; puts @mytext}
 
M

Mer Gilmartin

Hidetoshi said:
----<sample 5>--------------------------------------
@mytext = 'hi this is a test'
testtwo = TkEntry.new(Frameone)
testtwo.value = @mytext
ev = TkVirtualEvent.new('Button-1', 'Return')
testtwo.bind(ev){@mytext = testtwo.value; puts @mytext}

Trying your examples and think I understand them and what
they are doing. I have a much better idea of how to use
tkvirtual event anyway.

But The data in the entry box goes into the
variable as soon as I click on the entry box. Not when i click
on the button. Button-1 means left click so I see why this is
so.

How do I change the action to clicking on a button?
I was wondering if the button name instead of button-1 might do
it. But of course it doesnt.
 
M

Morton Goldberg

Trying your examples and think I understand them and what
they are doing. I have a much better idea of how to use
tkvirtual event anyway.

But The data in the entry box goes into the
variable as soon as I click on the entry box. Not when i click
on the button. Button-1 means left click so I see why this is
so.

How do I change the action to clicking on a button?
I was wondering if the button name instead of button-1 might do
it. But of course it doesnt.

Bind 'ButtonRelease-1' and its action to your button widget.
Supposing your button is referenced by the variable 'my_btn', then
the following should work:

my_btn.bind('ButtonRelease-1'){@mytext = testtwo.value; puts
@mytext}

I prefer handling a 'ButtonRelease-1' event to a 'Button-1' (an alias
for 'ButtonPress-1') because it gives the user a chance withdraw from
committing to a widget action to by clicking off the widget in question.

If you need to bind more than one event to the button, then use a
virtual event as Nagai san demonstrated.

Regards, Morton
 

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

Members online

Forum statistics

Threads
473,773
Messages
2,569,594
Members
45,125
Latest member
VinayKumar Nevatia_
Top