gpt4 book ai didi

python - 如何获取 QTreeWidget 第二列 QComboBox 中的内容?

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

我有一个 AppDialog(QtGui.QWidget) 包含一个 QtreeWidget

self.tree = QtGui.QTreeWidget()

我使用函数 seqTree 将数据从 self.sequences 填充到此 QtreeWidget。

来自 self.sequences 的数据:

{'090': 
{'090-0010': [
{'code': '090-0010_v000', 'type': 'Version', 'id': 26676, 'entity.Shot.sg_sequence.Sequence.code': '090', 'entity.Shot.code': '090-0010'},
{'code': '090-0010_maquette_v001', 'type': 'Version', 'id': 27848, 'entity.Shot.sg_sequence.Sequence.code': '090', 'entity.Shot.code': '090-0010'},
{'code': '090-0010_maquette_v002', 'type': 'Version', 'id': 27849, 'entity.Shot.sg_sequence.Sequence.code': '090', 'entity.Shot.code': '090-0010'}]},
'082':
{'082-0020': [
{'code': '082-0020_compo_v000', 'type': 'Version', 'id': 28748, 'entity.Shot.sg_sequence.Sequence.code': '082', 'entity.Shot.code': '082-0020'}}

函数seqTree:

def seqTree(self):  
for seq in sorted(self.sequences):
if self.sequences[seq]:
parent = QtGui.QTreeWidgetItem(self.tree)
parent.setFlags(parent.flags() | QtCore.Qt.ItemIsTristate | QtCore.Qt.ItemIsUserCheckable)
parent.setCheckState(0, QtCore.Qt.Unchecked)
parent.setText(0,unicode(seq))
for shot in self.sequences[seq]:
child = QtGui.QTreeWidgetItem(parent)
child.setFlags(child.flags() | QtCore.Qt.ItemIsUserCheckable)
child.setCheckState(0, QtCore.Qt.Unchecked)
child.setText(0,unicode(shot))
versionCombo = QtGui.QComboBox(self.tree)
versionCombo.setFixedWidth(200)
for version in sorted(self.sequences[seq][shot], reverse=True):
versionCombo.addItem(version['code'])
self.tree.setItemWidget(child, 1, versionCombo)

此解决方案用于填充数据。我的 QTreeWidget 是由第一个键构成的,然后是第一列中的子键、第二个键。在第二列中,我添加了一个包含代码内容的 QComboBox,例如“090-0010_maquette_v001”。

但是,我无法检索 ComboBox 的内容。为了检索选择,我使用了以下函数:

def checkedList(self):
checked = dict()
self.selection = []
root = self.tree.invisibleRootItem()
signal_count = root.childCount()

for i in range(signal_count):
signal = root.child(i)
checked_sweeps = list()
num_children = signal.childCount()

for n in range(num_children):
child = signal.child(n)
if child.checkState(0) == QtCore.Qt.Checked:
checked_sweeps.append(child.text(0))
#### I need here to retrieve the content of ComboBox.

checked[signal.text(0)] = checked_sweeps

for item in sorted(checked):
if not checked[item] == []:
for shot in checked[item]:
self.selection.append(shot)

我真的找不到如何到达 child 的第二列。我尝试了多种方法,例如 child.data()indexFromItem()。我是否需要将 ComboBox 链接到类才能找到它?或者 QtreeWidget 的链接就足够了吗?

最佳答案

您必须使用 itemWidget 获取 QComboBox:

if child.checkState(0) == QtCore.Qt.Checked:
checked_sweeps.append(child.text(0))
combo = self.tree.itemWidget(child, 1)
print(combo.currentText())

关于python - 如何获取 QTreeWidget 第二列 QComboBox 中的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53266775/

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