QtableWidgetItem strange behaviour when selecting items in the view

199 views
Skip to first unread message

benjam901

unread,
Feb 14, 2015, 10:32:56 AM2/14/15
to python_in...@googlegroups.com
Hello all,

I am writing a UI for a tool I put together a while back and am gathering a table view with a list of objects in one column and their parents in the other.

My QtableWidget view is giving me some very strange behaviour when selecting my items. The further down the list you get when you select the objects in column 0 the worse the return results get for example:

My table view looks essentially like this currently:

Root Master parent
anim_door parent_car_02
car_test World
Car_test_01 World
anim_door_left parent_car_test_02
anim_door_02 parent_car_02
car_test_02 World
Car_test_03 World
anim_door_right parent_car_test_02


I have a selection changed signal and am trying to get the Root and the parent using the following code:

def selectionChanged(self):
selectedItems = self.table.selectedItems()

for selected in selectedItems:
print selected.text()
#qIndex = self.table.indexFromItem(selected)
print"Root: ", self.table.item(selected.row(),selected.row()).text()
print "Parent: ", self.table.item(1,selected.row()).text()


Everything is working as far as on selection changed goes but the results I am getting are very odd. For example if I select row 7 values I will get:
Root: World
Parent: World

If I select row 0 I will get:
Root: anim_door
Parent: car_test

Selection of row 4:
Root: Car_test_01
Parent: Anim_door_left

I am not sure why I am getting these values. Could it have something do do with my initialisation or perhaps my selection model?

Selection model:
self.tableModel = self.table.selectionModel()
self.tableModel.selectionChanged.connect(self.selectionChanged)


def initTable(self):
itemsInScene = pm.ls(dag=True)
for item in itemsInScene:
# If the item is question has no attribute it errors hence the try except 1
try:
# If isRoot exists then add it to the list
if pm.getAttr(item.isRoot):
self.dictOfRoots.update({str(item.nodeName()):str(self.splitName(item, 0))})
except:
pass
rowNum = 0
self.table.setRowCount(len(self.dictOfRoots))
for key in sorted(self.dictOfRoots):
columnNum = 0
rootName = QtGui.QTableWidgetItem(str(key))
rootParent = QtGui.QTableWidgetItem(str(self.dictOfRoots.get(key)))
rootParent.setFlags(QtCore.Qt.ItemIsEnabled)

if rootParent.text() == rootName.text():
rootParent = QtGui.QTableWidgetItem(str("World"))

self.table.setItem(rowNum, columnNum, rootName)
self.table.setItem(rowNum, columnNum+1, rootParent)
rowNum += 1

Any help would be appreciated. Apologies for the lack of code trags, I am not sure where to find them or if this group supports them

Cheers!

Ben

Justin Israel

unread,
Feb 14, 2015, 2:57:59 PM2/14/15
to python_in...@googlegroups.com

It's because your call to item() is wrong.

    print"Root: ", self.table.item(selected.row(),selected.row()).text()
    print "Parent: ", self.table.item(1,selected.row()).text()

You are passing two row values on that first call, and then presumably passing column/row on the second, when it should be row/column

http://qt-project.org/doc/qt-4.8/qtablewidget.html#item

Change those to:

    row = selected.row()
    print"Root: ", self.table.item(row,  0).text()
    print "Parent: ", self.table.item(row, 1).text()

Justin


--
You received this message because you are subscribed to the Google Groups "Python Programming for Autodesk Maya" group.
To unsubscribe from this group and stop receiving emails from it, send an email to python_inside_maya+unsub...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/489379a3-3cff-49dd-a2a7-6d1af00291f4%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Reply all
Reply to author
Forward
0 new messages