自定义 QTreeWidgetItem Pyside2

Customize QTreeWidgetItem Pyside2

我有一个 QTreeWidget,我希望每一行都像这个小部件:

我知道如何创建小部件本身,如何创建基本的 QTreeWidgetItem,但我不知道如何将它们结合在一起。

我正在使用 PySide2 和 python。

没有任何最小可重现示例,如果我理解了你的问题,你可以尝试类似的方法。

它创建一个项目,您可以在每一列中分配一个文本或另一个小部件。

from PySide2 import QtWidgets, QtCore, QtGui

class Window(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(Window, self).__init__(parent=parent)

        layout = QtWidgets.QVBoxLayout()

        self.treewidget = QtWidgets.QTreeWidget()
        self.treewidget.setColumnCount(4)

        layout.addWidget(self.treewidget)

        self.setLayout(layout)

        self.build_tree()


    def build_tree(self):
        for index in range(10):
            item = QtWidgets.QTreeWidgetItem(self.treewidget)
            item.setText(0, 'icon 1')
            item.setText(1, 'icon 2')

            line_edit = QtWidgets.QLineEdit(self.treewidget)

            push_button = QtWidgets.QPushButton(self.treewidget)
            push_button.setText('TEST')

            self.treewidget.setItemWidget(item, 2, line_edit)
            self.treewidget.setItemWidget(item, 3, push_button)


app = QtWidgets.QApplication([])
window = Window()
window.show()
app.exec_()

如果你不想在你的 treewidget 中有超过一列,我认为你可以使用 Qwidget 和这样的布局(只需替换方法)。

def build_tree(self):
   for index in range(10):
   item = QtWidgets.QTreeWidgetItem(self.treewidget)

   widget = QtWidgets.QWidget()
   layout = QtWidgets.QHBoxLayout()

   label_1 = QtWidgets.QLabel('icon 1')
   label_2 = QtWidgets.QLabel('icon 2')
   line_edit = QtWidgets.QLineEdit()
   push_button = QtWidgets.QPushButton('TEST')

   layout.addWidget(label_1)
   layout.addWidget(label_2)
   layout.addWidget(line_edit)
   layout.addWidget(push_button)

   widget.setLayout(layout)

   self.treewidget.setItemWidget(item, 0, widget)

并在 init 方法中删除这一行:

self.treewidget.setColumnCount(4)