Ang
Ang

Reputation: 43

PyQt: get the current QTreeWidget item

I presently have a QTreeWidget named 'treeWidget', and for the life of me, cannot figure out how to get the index value or the text of the selected treeWidget branch.

self.treeWidget looks like:
User
-Inbox
-Sent
-Drafts
-Trash

I need to know which branch is selected so I can display folders in the branch's corresponding file folder. I've been trying to understand the Qt documentation, but I'm totally stumped by the C++. And the PyQt docs don't have any examples. I've searched everywhere for three days trying to tinker and figure out the answer but keep coming up with errors.

The closest I think I've come is something like this:

self.connect(self.treeWidget,SIGNAL("itemSelectionChanged()"), self.loadAllMessages)

def loadAllMessages(self, folder):
    item = self.treeWidget.currentItem()

Do I need to setSelectionMode first or something? All help is greatly appreciated!

Upvotes: 4

Views: 20176

Answers (2)

Dennis
Dennis

Reputation: 191

Following Achayans answer and comments, you get the index as a QModelIndex by using .indexFromItem(). To retrive now the real index, you need to use .row() which is described here and shown in the following code:

self.treeWidget.itemSelectionChanged.connect(self.loadAllMessages)
def loadAllMessages(self, folder):
getSelected = self.treeWidget.selectedItems()
if getSelected:
    baseNode = getSelected[0]
    qmIndex = self.treeWidget.indexFromItem(baseNode)
    itemIndex = qmIndex.row()
    print('Selected index: ', itemIndex)

Upvotes: 0

Achayan
Achayan

Reputation: 5885

Try This

#remove the old way of connecting
#self.connect(self.treeWidget,SIGNAL("itemSelectionChanged()"), self.loadAllMessages)
self.treeWidget.itemSelectionChanged.connect(self.loadAllMessages)
def loadAllMessages(self, folder):
    getSelected = self.treeWidget.selectedItems()
    if getSelected:
        baseNode = getSelected[0]
        getChildNode = baseNode.text(0)
        print getChildNode

Upvotes: 8

Related Questions