如何获取 QTreeWidget 第二列 QComboBox 中的内容?
How to reach content in QTreeWidget second colum QComboBox?
我有一个 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'.
但是,我无法检索组合框的内容。
要检索选择,我使用以下函数:
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()
。我需要 link ComboBox 到 class 才能找到它吗?或者 QtreeWidget 的 link 就足够了吗?
您必须通过 itemWidget
:
获得 QComboBox
if child.checkState(0) == QtCore.Qt.Checked:
checked_sweeps.append(child.text(0))
combo = self.tree.itemWidget(child, 1)
print(combo.currentText())
我有一个 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'.
但是,我无法检索组合框的内容。 要检索选择,我使用以下函数:
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()
。我需要 link ComboBox 到 class 才能找到它吗?或者 QtreeWidget 的 link 就足够了吗?
您必须通过 itemWidget
:
QComboBox
if child.checkState(0) == QtCore.Qt.Checked:
checked_sweeps.append(child.text(0))
combo = self.tree.itemWidget(child, 1)
print(combo.currentText())