【问题标题】:Customize QTreeWidgetItem Pyside2自定义 QTreeWidgetItem Pyside2
【发布时间】:2020-09-27 13:35:51
【问题描述】:

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

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

我正在使用 PySide2 和 python。

【问题讨论】:

    标签: python qt pyside2 qtreewidget qtreewidgetitem


    【解决方案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)
    

    【讨论】:

    • 非常感谢,这正是我想要的。先生,您救了我的命! :)
    猜你喜欢
    • 1970-01-01
    • 2021-11-20
    • 2022-07-01
    • 2021-12-11
    • 2019-02-07
    • 2020-12-09
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    相关资源
    最近更新 更多