PyQt4 Qtreewidget如果选中子复选框,则获取层次结构文本

2024-10-01 11:37:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我当前要做的是获取一个填充的树(qtreewidget),它在底部的子级有复选框,如果复选框被选中,则将路径的文本返回给子级。我之所以要这样做,是因为如果检查了一个子项,它将更改字典中键的值。(创建树的“原始”字典)。下面是一个直观的例子来说明我的意思:

  1. 通过用户输入和服务器目录爬网,我们填充了一个如下所示的树: (只有最底层的子项才有复选框。)很抱歉,这个可怕的树形图!!希望这有意义。。。在

已编辑

研究

-主题1

--日期

---[]c

---[]天

---[]e

-主题2

--日期

---[]克

---[]小时

  1. 例如,如果有人检查“g”level child,那么是否有办法以[1,B,g]或1-B-g或1/B/g等形式获取到“g”的路径。?

  2. 其中一个子级别(例如在示例A和B中)也被设置为用户可编辑的。所以我需要来自树的信息,而不是树最初填充的信息。

我试过印刷self.ui.treeWidget索引没有真正的运气得到我想要的。我觉得似乎有一个简单的解决办法,但我似乎找不到。希望有人能帮忙!在

实际代码段:

    for h,study in enumerate(tree_dict['study']):
        study_name = study['study_name']
        treeSTUDY = QtGui.QTreeWidgetItem(self.ui.treeWidget, [study_name])
        treeSTUDY.setFlags(QtCore.Qt.ItemIsEnabled)
        self.ui.treeWidget.expandItem(treeSTUDY)            

        for i,subject in enumerate(study['subject']):
            subject = subject['ID']
            treeSUBJECT = QtGui.QTreeWidgetItem(treeSTUDY, [subject_id])
            treeSUBJECT.setFlags(QtCore.Qt.ItemIsEditable | QtCore.Qt.ItemIsEnabled)

            for j,visit in enumerate(subject['visit']):
                scan_date = visit['date']                     
                treeDATE = QtGui.QTreeWidgetItem(treeSUBJECT, [scan_date[4:6])
                treeDATE.setFlags(QtCore.Qt.ItemIsEditable | QtCore.Qt.ItemIsEnabled)

                for k,ser in enumerate(visit['series']):
                    s_name = ser['name'] + '-' + ser['description']
                    count =  str(ser['count'])
                    treeSCAN = QtGui.QTreeWidgetItem(treeDATE)
                    treeSCAN.setFlags(QtCore.Qt.ItemIsEditable | QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsUserCheckable)
                    treeSCAN.setCheckState(0, QtCore.Qt.Unchecked)   
                    treeSCAN.setText(0, s_name)
                    treeSCAN.setText(1, ser['time'])
                    treeSCAN.setText(2, ser['number'])
                    treeSCAN.setText(3, 'count')

Tags: nameinforqtsersubjectqtguistudy
1条回答
网友
1楼 · 发布于 2024-10-01 11:37:30

您只需要一个方法,该方法遍历父/子链,获取每个项的文本,直到父项是None

def getTreePath(self, item):
    path = []
    while item is not None:
        path.append(str(item.text(0)))
        item = item.parent()
    return '/'.join(reversed(path))

更新

下面是一个演示脚本,演示如何获取选中项并检索其路径:

^{pr2}$

相关问题 更多 >