gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 01:19:08 26 4
gpt4 key购买 nike

我目前正在尝试做的是采用在底部子级具有复选框的填充树 (qtreewidget),如果选中该框,则将路径文本返回给子级。我想这样做的原因是,如果检查了一个 child ,它将更改字典中键的值。 (创建树的“原始”字典)。这是我的意思的一个直观示例:

  1. 根据用户输入和服务器目录爬取,我们填充了一个看起来像这样的树:(只有最低级别的子项目才有复选框。)对于可怕的 TreeMap 感到抱歉!希望这是有道理的...

已编辑

学习

-主题 1

--日期

---[]c

---[]d

---[]e

-主题 2

--日期

---[]g

---[]h

  1. 如果有人检查(例如)“g”级别的 child ,是否可以通过 [1, B, g] 或 1-B-g 或 1 之类的形式获取到“g”的路径/B/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')

最佳答案

您所需要的只是一个沿着父/子链向上移动的方法,获取每个项目的文本,直到父级为 None:

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

更新:

这是一个演示脚本,展示了如何获取选中的项目并检索其路径:

from PyQt4 import QtCore, QtGui

class Window(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
self.tree = QtGui.QTreeWidget(self)
self.tree.setHeaderHidden(True)
for index in range(2):
parent = self.addItem(self.tree, 'Item%d' % index)
for color in 'Red Green Blue'.split():
subitem = self.addItem(parent, color)
for letter in 'ABC':
self.addItem(subitem, letter, True, False)
layout = QtGui.QVBoxLayout(self)
layout.addWidget(self.tree)
self.tree.itemChanged.connect(self.handleItemChanged)

def addItem(self, parent, text, checkable=False, expanded=True):
item = QtGui.QTreeWidgetItem(parent, [text])
if checkable:
item.setCheckState(0, QtCore.Qt.Unchecked)
else:
item.setFlags(
item.flags() & ~QtCore.Qt.ItemIsUserCheckable)
item.setExpanded(expanded)
return item

def handleItemChanged(self, item, column):
if item.flags() & QtCore.Qt.ItemIsUserCheckable:
path = self.getTreePath(item)
if item.checkState(0) == QtCore.Qt.Checked:
print('%s: Checked' % path)
else:
print('%s: UnChecked' % path)

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

if __name__ == '__main__':

import sys
app = QtGui.QApplication(sys.argv)
window = Window()
window.setGeometry(500, 300, 250, 450)
window.show()
sys.exit(app.exec_())

关于python - PyQt4 Qtreewidget - 如果选中子复选框,则获取层次结构文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22419673/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com