将QTreeWidgetItem与现有QTreeWidgetItem的父级设置为第二列,以维护第一列

2024-07-03 06:55:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我创建了一个QTreeWidget,并使用QTreeWidget.addTopLevelItem项目方法。QTreeWidgetItem与QTreeWidgetItem.addChild文件. 效果很好。但是,我想在每个QTreeWidgetItem旁边添加一个向左刷新而不是向右刷新的复选框(通过添加QtCore.Qt.ItemIsUserCheckable项目). 我可以在第二列中添加一个复选框并维护树。当我将checkbox添加到第一列,将setText添加到secound列时,所有这些都被搞砸了。你知道吗

如果我给QTreeWidgetItem添加一个复选框,会得到如下结果:

[   ] red
    [   ] blue  
    [   ] green 
        [   ] orange 
            [    ] purple  
                 [   ] pink

我不想把复选框放在颜色旁边。我正在寻找:

Col1 | Col2
[   ] red 
[   ]     blue 
[   ]     green 
[   ]         orange 
[   ]            purple 
[   ]                pink

我知道我需要在QtWidgets.QTreeWidgetItem比如:

self.button = QtWidgets.QPushButton("L") # testing with a button
treeWidget = self.treeWidget()
treeWidget.setItemWidget(self, 0,self.button)

我在树上寻找什么。 I am looking to make the tree like the following image. Nevermind the 3 columns, I am using 2


Tags: 项目selfbuttongreenbluered复选框purple
1条回答
网友
1楼 · 发布于 2024-07-03 06:55:09

您可以将复选框设置为QTreeWidget中的第二列,并交换头的第一和第二部分,例如

from PySide2 import QtWidgets, QtCore

class MyItem(QtWidgets.QTreeWidgetItem):
    def __init__(self, label):
        super().__init__([label, ''])
        self.setCheckState(1, QtCore.Qt.Unchecked)
        self.setFlags(self.flags() | QtCore.Qt.ItemIsAutoTristate)

class MyTree(QtWidgets.QTreeWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.setColumnCount(2)
        self.header().swapSections(1,0)
        self.header().resizeSection(1, 80)

if __name__ == "__main__":
    app = QtWidgets.QApplication([])
    tree = MyTree()
    tree.setHeaderLabels(['label', 'checked'])
    items = [MyItem(f'item {i}') for i in range(6)]
    tree.insertTopLevelItems(0, items)
    for i, item in enumerate(items):
        for j in range(4):
            items[i].addChild(MyItem(f'item {i}-{j}'))
    tree.show()
    app.exec_()

注意,我还将QtCore.Qt.ItemIsAutoTristate设置为在项目的检查状态更改时自动更新其父/子项的检查状态。 screenshot of tree with checkboxes on the left

相关问题 更多 >