Problem:
<code>
>>> from Tix import *
>>> root=Tk()
>>> nb=NoteBook(root)
>>> nb.add('pg_1', label='pg 1')
>>> nb.pages()
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "/usr/local/lib/python2.4/lib-tk/Tix.py", line 1160, in pages
ret.append(self.subwidget(x))
File "/usr/local/lib/python2.4/lib-tk/Tix.py", line 337, in subwidget
raise TclError, "Subwidget " + name + " not child of " + self._name
_tkinter.TclError: Subwidget p not child of -1211878740
</code>
Visiting Tix.py I found at line 1155 the following function:
<code>
def pages(self):
# Can't call subwidgets_all directly because we don't want .nbframe
names = self.tk.split(self.tk.call(self._w, 'pages'))
ret = []
for x in names:
ret.append(self.subwidget(x))
return ret
</code>
The issue is that, for only one tab "names" is a string (the name of the tab),
while for 2 or
more it is a tuple of names of tabs. For an empty NoteBook, "names" is an empty
string. The
for loop in the case of one tab will go through the letters of the tab's name,
and that is where
subwidget fails.
Resolution:
<code>
def pages(self):
# Can't call subwidgets_all directly because we don't want .nbframe
names = self.tk.split(self.tk.call(self._w, 'pages'))
ret = []
if names and type(names) == type('a'): # sxn # 1 tab gives a string
ret.append(self.subwidget(names)) # sxn #
else: # sxn # 2+ tabs give a tuple
for x in names:
ret.append(self.subwidget(x))
return ret
</code>
I am on Linux, Python 2.4.2, Tcl/Tk 8.4, Tix 8.2
Sorin
____________________________________________________________________________________
Yahoo! Music Unlimited
Access over 1 million songs.
http://music.yahoo.com/unlimited
_______________________________________________
Tkinter-discuss mailing list
Tkinter-discuss@python.org
http://mail.python.org/mailman/listinfo/tkinter-discuss