我正在构建一个简单的应用程序,以打开一个数据文件夹并绘制该数据.导入数据会更新QTreeWidget,该QTreeWidget显示可以绘制哪些信号.例如:
使用以下命令导入数据后,将填充QTreeWidget:
def update_treeWidget(self):
headers = self.df['voltage recording'].columns[1:]
sweeps = self.df['voltage recording'].index.levels[0]
for header in headers:
parent_item = QtWidgets.QTreeWidgetItem(self.treeWidget)
parent_item.setCheckState(0, QtCore.Qt.Unchecked)
parent_item.setText(0, header)
for sweep in sweeps:
child_item = QtWidgets.QTreeWidgetItem(parent_item)
child_item.setCheckState(0, QtCore.Qt.Unchecked)
child_item.setText(0, sweep)
但是,对于我现在尚不清楚的是,我将如何检查树中任何项目的已检查状态.
所以我的两个问题是:
>我将如何引用该树的任何部分以检查其检查状态(父级或父级的各个子级)
>有没有一种方法可以简单地返回所有选中框的列表?如果我能找到问题1的答案,那么我显然可以创建一个函数,每次选中一个框时,该框就会添加到列表中(如果未选中,则从列表中删除).但是由于这里的目标只是绘制所有检查过的信号,所以对我而言(从逻辑上来讲,无论从逻辑上来说),最直接的事情是单击“绘制”按钮后,界面会首先检查以查看选中了哪些信号框,然后绘制这些信号.
在所有示例中,我似乎都明确声明了树项(即item_1,item_2),因此引用它们很简单.但是,由于我是如何填充树的,所以我不知道该怎么做.
如果这首先是不正确的方法来填充树,请让我知道和/或向我指出更正确的方法.
谢谢
编辑:
这非常类似于:
PyQT QTreeWidget iterating
这就是我的回答依据.
解决方法:
弄清楚了.这至少达到了我需要实现的目标:
def find_checked(self):
checked = dict()
root = self.treeWidget.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))
checked[signal.text(0)] = checked_sweeps
return checked