Родитель QTreeWidgetItem для существующего QTreeWidgetItem для второго столбца, поддерживающего первый столбец - PullRequest
0 голосов
/ 20 июня 2019

Я создал QTreeWidget и создал QTreeWidgetItem, используя метод QTreeWidget.addTopLevelItem.QTreeWidgetItem связаны друг с другом с помощью QTreeWidgetItem.addChild.Который работает отлично.Однако я хочу добавить флажок, который сбрасывается влево, а не вправо, рядом с каждым QTreeWidgetItem (что легко, добавив QtCore.Qt.ItemIsUserCheckable).Я могу добавить флажок во второй столбец и поддерживать дерево.Все, что мешает, когда я добавляю флажок в первый столбец и 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

1 Ответ

1 голос
/ 23 июня 2019

Вы можете установить флажки для второго столбца в 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

...