PyQt:获取当前QTreeWidget项目

4

我目前有一个名为 'treeWidget' 的 QTreeWidget,但是我无法弄清如何获取所选 treeWidget 分支的索引值或文本。

self.treeWidget 如下所示:
用户
-收件箱
-已发送
-草稿
-垃圾箱

我需要知道哪个分支被选中,以便在分支对应的文件夹中显示文件夹。我一直在尝试理解 Qt 文档,但我完全被 C++ 给难住了。而 PyQt 文档没有任何示例。我已经在到处搜索三天,试图调整和找出答案,但一直出现错误。

我认为最接近答案的方法类似于:

self.connect(self.treeWidget,SIGNAL("itemSelectionChanged()"), self.loadAllMessages)
def loadAllMessages(self, folder): item = self.treeWidget.currentItem()

我是否需要先设置选择模式或其他什么东西?非常感谢所有的帮助!

2个回答

8

试一试

#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

我能用这种方式获取所选子项的索引号吗?似乎我不能仅仅将“.indexOfChild”替换为“.text”。PyQt文档中说“int indexOfChild (self, QTreeWidgetItem achild)”,但我不知道应该将QTreeWidgetItem achild部分放在哪里... - Ang
你需要使用 indexFromItem 来找到它。像 itmIndex =self.treeWidget.indexFromItem(baseNode) 这样的东西。 - Achayan
嗯...尝试了<pre>print self.treeWidget.indexFromItem(baseNode)</pre>但它一直输出“<PyQt4.QtCore.QModelIndex object at 0x7f891bbfd398>”。尝试更改不同的东西,但无法让它工作...有什么想法吗? - Ang

0
根据Achayans的回答和评论,你可以使用.indexFromItem()来获取一个QModelIndex作为索引。要获取真正的索引,现在需要使用.row()方法,该方法在这里进行了描述,并在以下代码中展示:
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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接