Tkinter problem

Eric Brunel eric.brunel at pragmadev.com
Fri May 16 09:33:24 EDT 2003


Newt wrote:
> I've got a Label, created like:
> 
>         self.sp = Label(self.sel_s, text="")
>         self.sp.grid(row=4, col=3)
> 
> I can change the text using:
> 
>         self.sp.configure(text='Something else')
> 
> I can conditionally test the text in the label using
> 
>         if self.sp['text'] == "" :
> 
> but how do I get the text data out again? I've tried the following ways:
> 
>         sp = self.sp.cget('text')
>         sp = self.sp.cget(text)
>         sp = self.sp['text']
> 
> but all I get back are errors similar to the below (that ones for sp =
> self.sp['text'] ):
> 
> Exception in Tkinter callback
> Traceback (most recent call last):
>   File "C:\Python22\lib\lib-tk\Tkinter.py", line 1292, in __call__
>     return apply(self.func, args)
>   File "D:\py_stuff\curry.py", line 14, in __call__
>     return self.fun(*(self.pending + args), **kw)
>   File "D:\py_stuff\hometown.py", line 121, in bexit
>     sp = self.sp['text']
>   File "C:\Python22\lib\lib-tk\Tkinter.py", line 1090, in cget
>     return self.tk.call(self._w, 'cget', '-' + key)
> TclError: invalid command name ".9722920.9736352"
> 
> I'm kinda confused as to what's going on. Any suggestions would be useful.
> 
> TIA
> Newt

Let me guess: when you do the self.sp['text'] or self.sp.cget('text'), your 
label is not displayed anymore, is it? If it isn't, the behaviour you get is 
normal: you can't ask a property on a widget that is no more displayed, since 
this means that the widget no more exists for tk, and therefore cannot have any 
property...

One way to do what you want is to use tk variables. These variables are a means 
to store the text or state of a widget outside the widget itself. It is 
typically what you will use for entries, but they can be used for labels too. 
For example:

self.spVar = StringVar()
self.spVar.set("")
self.sp = Label(self.sel_s, textvariable=self.spVar)
self.sp.grid(row=4, col=3)

Then you can access the text of the label via self.spVar.get(), whether the 
label is displayed or not.

HTH
-- 
- Eric Brunel <eric.brunel at pragmadev.com> -
PragmaDev : Real Time Software Development Tools - http://www.pragmadev.com





More information about the Python-list mailing list