By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
443,908 Members | 1,850 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 443,908 IT Pros & Developers. It's quick & easy.

Getting value from Tkinter entry widget: variable scope difficulty

P: n/a
I'm trying to construct a simple Tkinter GUI and I'm having trouble with
getting the value of an entry widget and passing it onto a callback
function. But I'm not grokking variable scope correctly.

I have two functions. Here are the relevant excerpts:

def makeGUI():

###lots of code to set up toplevel windows

searchbutton=Button(topframe, image=searchglass, command=doSomething)
searchbutton.image=searchglass
searchbutton.pack(side=LEFT, expand = NO)

searchterm=StringVar()

entryterm=Entry(topframe, textvariable=searchterm)
entryterm.pack(side=RIGHT)

entrylabel=Label(topframe, text="Search:")
entrylabel.pack(side=RIGHT)
def doSomething():

file = os.popen('systemcommand %s' % searchterm, 'r')

print searchterm

---

What I want to happen is the value of searchterm to be passed on to the
doSomething() call when the searchbutton is pressed. Right now it
appears the value of "searchterm" is local to each function.

In Tcl this would be handled by simply assigning the variable
"searchterm" to the global namespace in each function, i.e. "global
searchterm." I've looked and can't quite figure out how to do this in
Python. Any advice is appreciated.

--
Kevin Walzer
Code by Kevin
http://www.codebykevin.com
Nov 20 '06 #1
Share this Question
Share on Google+
2 Replies


P: n/a

Kevin,
if the present value of searchterm is what you
want, I suggest you make a class
class Kgui:
def __init__(self) : # init self
self.makeGUI()
def makeGUI(self):

###lots of code to set up toplevel windows

searchbutton=Button(topframe,
image=searchglass, command=self.doSomething)
searchbutton.image=searchglass
searchbutton.pack(side=LEFT, expand = NO)

# and all the resrt of the code
def doSomething(self):

file = os.popen('systemcommand %s' %
searchterm, 'r')

self.searchterm = searchterm

print self.searchterm #used inside the class

Kgui.searchterm = searchterm

print Kgui.searchterm #used outside the class


you can also do;
Kgui.searchterm = self.searchterm = searchterm

I think this is what you are asking for.

jim-on-linux

http://www.inqvista.com


On Sunday 19 November 2006 21:18, Kevin Walzer
wrote:
I'm trying to construct a simple Tkinter GUI
and I'm having trouble with getting the value
of an entry widget and passing it onto a
callback function. But I'm not grokking
variable scope correctly.

I have two functions. Here are the relevant
excerpts:

def makeGUI():

###lots of code to set up toplevel windows

searchbutton=Button(topframe,
image=searchglass, command=doSomething)
searchbutton.image=searchglass
searchbutton.pack(side=LEFT, expand = NO)

searchterm=StringVar()

entryterm=Entry(topframe,
textvariable=searchterm)
entryterm.pack(side=RIGHT)

entrylabel=Label(topframe, text="Search:")
entrylabel.pack(side=RIGHT)
def doSomething():

file = os.popen('systemcommand %s' %
searchterm, 'r')

print searchterm

---

What I want to happen is the value of
searchterm to be passed on to the doSomething()
call when the searchbutton is pressed. Right
now it appears the value of "searchterm" is
local to each function.

In Tcl this would be handled by simply
assigning the variable "searchterm" to the
global namespace in each function, i.e. "global
searchterm." I've looked and can't quite figure
out how to do this in Python. Any advice is
appreciated.

--
Kevin Walzer
Code by Kevin
http://www.codebykevin.com
Nov 20 '06 #2

P: n/a
"Kevin Walzer" <kw@kevin-walzer.com>
I'm trying to construct a simple Tkinter GUI and I'm having trouble with
getting the value of an entry widget and passing it onto a callback
function. But I'm not grokking variable scope correctly.

I have two functions. Here are the relevant excerpts:

def makeGUI():

###lots of code to set up toplevel windows

searchbutton=Button(topframe, image=searchglass, command=doSomething)
searchbutton.image=searchglass
searchbutton.pack(side=LEFT, expand = NO)

searchterm=StringVar()
this will make a new local variable - if you want to assign to the global one,
you need to add a global statement before doing this, in this makeGUI function.
- you can read the global here if you have defined searchterm in an outer scope,
but the assign will make a new local one.
>
entryterm=Entry(topframe, textvariable=searchterm)
entryterm.pack(side=RIGHT)

entrylabel=Label(topframe, text="Search:")
entrylabel.pack(side=RIGHT)
def doSomething():

file = os.popen('systemcommand %s' % searchterm, 'r')
here searchterm seems to be a command line variable.
look in the help for sys.argv how to access command line variables

- not that you need to, but its good to know... :-)

had makeGUI been a class instead of a function, you could have
written makeGUI.searchterm here, without mucking around with globals....
>
print searchterm

---

What I want to happen is the value of searchterm to be passed on to the
doSomething() call when the searchbutton is pressed. Right now it
appears the value of "searchterm" is local to each function.
True
In Tcl this would be handled by simply assigning the variable
"searchterm" to the global namespace in each function, i.e. "global
searchterm." I've looked and can't quite figure out how to do this in
Python. Any advice is appreciated.
global searchterm # - in outer scope

global searchterm # - in inner scope before assign
HTH - Hendrik
Nov 20 '06 #3

This discussion thread is closed

Replies have been disabled for this discussion.