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

Can't Get A Selection from Tktable...

P: n/a
Hi,
I have a Tktable object (self.table) and when I click on a row the
whole row is selected.

If I click of a button to get the row contents then

self.table.curselection() fails with a traceback of:

Traceback (most recent call last):
File
"/Library/Frameworks/Python.framework/Versions/2.4//lib/python2.4/lib-tk/Tkinter.py",
line 1345, in __call__
return self.func(*args)
File "/Users/jerry/python/PyPgExplorerUni/Resources/editor.py", line
159, in deleteRow
print self.table.curselection()
File
"/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/Tktable.py",
line 139, in curselection
return self._getCells(self.tk.call(self._w, 'curselection'))
File
"/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/Tktable.py",
line 106, in _getCells
for i in string.split(cellString):
File
"/Library/Frameworks/Python.framework/Versions/2.4//lib/python2.4/string.py",
line 292, in split
return s.split(sep, maxsplit)
AttributeError: 'tuple' object has no attribute 'split'

It is my reading that curselection will return the indices of the
selected cells...

Help,

Jerry

Jul 11 '06 #1
Share this Question
Share on Google+
3 Replies


P: n/a

je*********@gmail.com wrote:
Hi,
I have a Tktable object (self.table) and when I click on a row the
whole row is selected.

If I click of a button to get the row contents then

self.table.curselection() fails with a traceback of:

Traceback (most recent call last):
File
"/Library/Frameworks/Python.framework/Versions/2.4//lib/python2.4/lib-tk/Tkinter.py",
line 1345, in __call__
return self.func(*args)
File "/Users/jerry/python/PyPgExplorerUni/Resources/editor.py", line
159, in deleteRow
print self.table.curselection()
File
"/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/Tktable.py",
line 139, in curselection
return self._getCells(self.tk.call(self._w, 'curselection'))
File
"/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/Tktable.py",
line 106, in _getCells
for i in string.split(cellString):
File
"/Library/Frameworks/Python.framework/Versions/2.4//lib/python2.4/string.py",
line 292, in split
return s.split(sep, maxsplit)
AttributeError: 'tuple' object has no attribute 'split'

It is my reading that curselection will return the indices of the
selected cells...

Help,

Jerry
looking into Tktable the curselection function is defined by:

def curselection(self, setValue = None):
if setValue != None:
self.tk.call(self._w, 'curselection', 'set', setValue)
else:
return self._getCells(self.tk.call(self._w, 'curselection'))

looking at getCells we see:

def _getCells(self, cellString):
#JHL
print cellString
res = []
for i in string.split(cellString):
res.append(tuple(map(int, string.split(i, ','))))
return res

When I run my program and select a row the value of cellString is

('3,0', '3,1', '3,2', '3,3', '3,4', '3,5', '3,6')

Which is the correct results...( ie the "fourth" row is selected and
there are six
columns...

Unfortunately the above is *not* a string and hence the "for" statement
fails.

It is hard to believe that I am the first person to attempt to retrieve
a selection
from a Tktable object....

Am I overlooking something obvious?

Jerry

Jul 11 '06 #2

P: n/a

je*********@gmail.com wrote:
je*********@gmail.com wrote:
Hi,
I have a Tktable object (self.table) and when I click on a row the
whole row is selected.

If I click of a button to get the row contents then

self.table.curselection() fails with a traceback of:

Traceback (most recent call last):
File
"/Library/Frameworks/Python.framework/Versions/2.4//lib/python2.4/lib-tk/Tkinter.py",
line 1345, in __call__
return self.func(*args)
File "/Users/jerry/python/PyPgExplorerUni/Resources/editor.py", line
159, in deleteRow
print self.table.curselection()
File
"/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/Tktable.py",
line 139, in curselection
return self._getCells(self.tk.call(self._w, 'curselection'))
File
"/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/Tktable.py",
line 106, in _getCells
for i in string.split(cellString):
File
"/Library/Frameworks/Python.framework/Versions/2.4//lib/python2.4/string.py",
line 292, in split
return s.split(sep, maxsplit)
AttributeError: 'tuple' object has no attribute 'split'

It is my reading that curselection will return the indices of the
selected cells...

Help,

Jerry

looking into Tktable the curselection function is defined by:

def curselection(self, setValue = None):
if setValue != None:
self.tk.call(self._w, 'curselection', 'set', setValue)
else:
return self._getCells(self.tk.call(self._w, 'curselection'))

looking at getCells we see:

def _getCells(self, cellString):
#JHL
print cellString
res = []
for i in string.split(cellString):
res.append(tuple(map(int, string.split(i, ','))))
return res

When I run my program and select a row the value of cellString is

('3,0', '3,1', '3,2', '3,3', '3,4', '3,5', '3,6')

Which is the correct results...( ie the "fourth" row is selected and
there are six
columns...

Unfortunately the above is *not* a string and hence the "for" statement
fails.

It is hard to believe that I am the first person to attempt to retrieve
a selection
from a Tktable object....

Am I overlooking something obvious?

Jerry
I think I have found a bug in the Tktable.py wrapper.

It appears that if a row is selected in a Tktable (in Python)
then any attempt to fetch the selection with curselection
fails when a string operation is performed on a "tuple"

the relevant routines in Tktable.py are:
def curselection(self, setValue = None):
if setValue != None:
self.tk.call(self._w, 'curselection', 'set', setValue)
else:
return self._getCells(self.tk.call(self._w, 'curselection'))

curselection will call _getCells

def _getCells(self, cellString):
res = []
#JHL
if type(cellString) == type(()) : return cellString
for i in string.split(cellString):
res.append(tuple(map(int, string.split(i, ','))))
return res

I added the "if type( ...." line to prevent the error.

If a table row is selected cellString will look like

('3,0', '3,1', '3,2', '3,3', '3,4', '3,5', '3,6')

which is of type "tuple" which fails the string.split command ;(

I suspect it is probably best to just short circuit the call to
_getCells.

The following routine (with the above patch )will correctly retrieve
the contents
of a selected row.

def deleteRow(self):
res = self.table.curselection()
for index in res :
print self.table.get(index)

Tain't clear to me where this should be reported

Jerry

Jul 11 '06 #3

P: n/a

je*********@gmail.com wrote:
je*********@gmail.com wrote:
je*********@gmail.com wrote:
Hi,
I have a Tktable object (self.table) and when I click on a row the
whole row is selected.
>
If I click of a button to get the row contents then
>
self.table.curselection() fails with a traceback of:
>
Traceback (most recent call last):
File
"/Library/Frameworks/Python.framework/Versions/2.4//lib/python2.4/lib-tk/Tkinter.py",
line 1345, in __call__
return self.func(*args)
File "/Users/jerry/python/PyPgExplorerUni/Resources/editor.py", line
159, in deleteRow
print self.table.curselection()
File
"/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/Tktable.py",
line 139, in curselection
return self._getCells(self.tk.call(self._w, 'curselection'))
File
"/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/Tktable.py",
line 106, in _getCells
for i in string.split(cellString):
File
"/Library/Frameworks/Python.framework/Versions/2.4//lib/python2.4/string.py",
line 292, in split
return s.split(sep, maxsplit)
AttributeError: 'tuple' object has no attribute 'split'
>
It is my reading that curselection will return the indices of the
selected cells...
>
Help,
>
Jerry
looking into Tktable the curselection function is defined by:

def curselection(self, setValue = None):
if setValue != None:
self.tk.call(self._w, 'curselection', 'set', setValue)
else:
return self._getCells(self.tk.call(self._w, 'curselection'))

looking at getCells we see:

def _getCells(self, cellString):
#JHL
print cellString
res = []
for i in string.split(cellString):
res.append(tuple(map(int, string.split(i, ','))))
return res

When I run my program and select a row the value of cellString is

('3,0', '3,1', '3,2', '3,3', '3,4', '3,5', '3,6')

Which is the correct results...( ie the "fourth" row is selected and
there are six
columns...

Unfortunately the above is *not* a string and hence the "for" statement
fails.

It is hard to believe that I am the first person to attempt to retrieve
a selection
from a Tktable object....

Am I overlooking something obvious?

Jerry

I think I have found a bug in the Tktable.py wrapper.

It appears that if a row is selected in a Tktable (in Python)
then any attempt to fetch the selection with curselection
fails when a string operation is performed on a "tuple"

the relevant routines in Tktable.py are:
def curselection(self, setValue = None):
if setValue != None:
self.tk.call(self._w, 'curselection', 'set', setValue)
else:
return self._getCells(self.tk.call(self._w, 'curselection'))

curselection will call _getCells

def _getCells(self, cellString):
res = []
#JHL
if type(cellString) == type(()) : return cellString
for i in string.split(cellString):
res.append(tuple(map(int, string.split(i, ','))))
return res

I added the "if type( ...." line to prevent the error.

If a table row is selected cellString will look like

('3,0', '3,1', '3,2', '3,3', '3,4', '3,5', '3,6')

which is of type "tuple" which fails the string.split command ;(

I suspect it is probably best to just short circuit the call to
_getCells.

The following routine (with the above patch )will correctly retrieve
the contents
of a selected row.

def deleteRow(self):
res = self.table.curselection()
for index in res :
print self.table.get(index)

Tain't clear to me where this should be reported

Jerry
It would not be any fun for my app users if I had to change the
Tktable.py
source all by myself....

Here is another fix that involves calling Tk directly

instead of :
res = self.table.curselection()

I can do:
res = self.root.tk.call(self.table,'curselection')

root is the app top level ( self.table works also...)

for a row the above call will return something like
('2,0', '2,1', '2,2', '2,3', '2,4', '2,5', '2,6')

the "co-ordinate" strings in the above tuple can be used
as indices into the table to retreive the selection.
Jerry

Jul 12 '06 #4

This discussion thread is closed

Replies have been disabled for this discussion.