自定义QTreeWidgetItem Pyside2

问题描述 投票:0回答:1

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

enter image description here

我知道如何创建窗口小部件本身,如何创建基本的QTreeWidgetItem,但我不知道如何将两者绑定在一起。

我正在使用PySide2和python。

python qt pyside2 qtreewidget qtreewidgetitem
1个回答
1
投票

没有任何可重现的示例,如果我对您的问题有所怀疑,可以尝试类似的方法。

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

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)
    
© www.soinside.com 2019 - 2024. All rights reserved.