"Peter Otten" <[EMAIL PROTECTED]> wrote: |H J van Rooyen wrote: | | > Hi, | > | > Still struggling with my GUI exercise - | > | > I have the following lines of code in a routine that is bound at | > <Key-Return> to an instance of Entry : | > | > self.disp.Amount_des = Label(self.disp, text = self.dis_string, fg | > = | > 'black', bg = 'yellow') | > self.disp.Amount_des.grid(row = self.rownum, column=0, sticky = | > 'nesw') | > | > self.disp.Amount = Label(self.disp, text = self.retstring, fg = | > 'black', | > bg = 'green') | > self.disp.Amount.grid(row = self.rownum, column=1, sticky = | > N+S+E+W) | > | > The second call to the grid method fails as follows: | > | > Exception in Tkinter callback | > Traceback (most recent call last): | > File "E:\PYTHON24\lib\lib-tk\Tkinter.py", line 1345, in __call__ | > return self.func(*args) | > File "C:\WINDOWS\DESKTOP\Entry1.py", line 243, in entryend | > self.disp.Amount.grid(row = self.rownum, column=1, sticky = N+S+E+W) | > TypeError: cannot concatenate 'str' and 'instance' objects | > | > If I change the N+S+E+W to the 'nsew' form, it works no problem... | > | > Weird - at other places in the program the form: sticky = N+S+E+W works | > without a problem. | > I found the 'nsew' form by trial and error... | > | > self.disp is a window different from the current one - it is used to | > display a record entry as it is built up field by field. - the code | > fragment above is what inserts the description of the entry and the | > entered data in a row in the window used for displaying, when the user | > hits the enter key. | > | > Is this a bug, or am I still doing something wrong? | | You have probably defined your own, say, E somewhere in your module: | | E = ... # whatever | | This can easily be fixed by using another name. But what you are really | doing wrong is using the | | from Tkinter import * | | star-import which drastically increases the likelihood of such name clashes. | I recommend using qualified names, abbreviated if you like: | | import Tkinter as tk | | ... tk.N + tk.S + tk.E + tk.W ... # a bit longer, but worth the effort | | Of course this could still go wrong if you do | | tk = 42 | | somewhere in your module... | | Peter
Well spotted that man! the offending line was: def entryend(self,S): """This gets done on carriage return""" The 'S" is not actually used by me - it was added because the callback passes Something back and I got an error earlier while I was still using pack... *grin* This also explains why it only happens here and not elsewhere... Problem sorted - False alarm! - Thanks -- http://mail.python.org/mailman/listinfo/python-list