PyQt - 获取所有在 QTreeWidget 中检查的列表

dan*_*n_g 6 python pyqt qtreewidget qt-signals

我正在构建一个简单的应用程序来打开一个数据文件夹并绘制该数据。导入数据更新一个 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)
Run Code Online (Sandbox Code Playgroud)

但是,我不清楚我将如何检查树中任何项目的已检查状态。

所以我的两个问题是:

  1. 我将如何引用该树的任何部分来检查它的检查状态(父级或父级的各个子级)

  2. 有没有办法简单地返回所有选中的框的列表?如果我能找出问题 1 的答案,我显然可以创建一个函数,每次选中一个框时,它都会添加到列表中(如果未选中,则从该列表中删除)。但由于这里的目标只是绘制所有选中的信号,对我来说最直接的事情(无论如何在逻辑上)是点击“绘制”按钮后,界面首先检查哪些信号框被选中,然后绘制这些信号。

在所有示例中,我似乎都明确声明了树项(即 item_1、item_2),因此引用它们很简单。但是,由于我如何填充树,我不明白如何做到这一点。

如果这是首先填充树的不正确方法,请告诉我和/或指出更正确方法的方向。

谢谢

编辑:

这非常类似于: PyQT QTreeWidget iterating

这就是我的答案所依据的。

dan*_*n_g 6

弄清楚了。这至少实现了我需要它实现的目标:

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
Run Code Online (Sandbox Code Playgroud)