【问题标题】:How can I set the alignment of the arrows on a QTreeWidgetItem如何设置 QTreeWidgetItem 上箭头的对齐方式
【发布时间】:2021-06-14 14:33:44
【问题描述】:

我希望这些 TreeWidget 箭头与 TreeWidgetItem 的顶部对齐。

我有一个QtWidgets.QTreeWidget(),并创建了一个自定义QtWidgets.QTreeWidgetItem()

然后我设置一个自定义项目小部件self.tree_widget.setItemWidget(self.tree_widget_item, 0, self.main_widget)

因此,装饰器/箭头将自己均匀地定位在几何图形的中心,但我希望它在顶部对齐。

我一直在考虑为此设置对齐方式,但不能 100% 确定在哪里设置,或者是否需要通过样式表进行设置。如果我无法移动它,我可以创建一个自定义小部件来替换装饰器,并隐藏默认小部件,但如果可能的话,我更愿意使用这里的东西。 有任何想法吗?谢谢!

【问题讨论】:

    标签: qt pyside qtreeview qtreewidget qtreewidgetitem


    【解决方案1】:

    您可以重新实现 QTreeView.drawBranches 并为用于绘制每个分支的 QRect 设置较小的高度。如果箭头是对称的,那么简单地使用宽度是一个很好的值。

    import sys
    from PySide2.QtWidgets import *
    
    class Tree(QTreeWidget):
    
        def drawBranches(self, painter, rect, index):
            rect.setHeight(rect.width())
            super().drawBranches(painter, rect, index)
            
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        tree = Tree()
        for i in range(5):
            item = QTreeWidgetItem([f'Item {i}\n\n'])
            item.addChild(QTreeWidgetItem([f'Child {i}']))
            tree.addTopLevelItem(item)
        tree.show()
        sys.exit(app.exec_())
    

    之前    |之后:

        

    【讨论】:

    • 完美,这正是我想要的。谢谢!很遗憾它必须是它自己的课程,但也许这样更好/更清洁!我不得不稍微不同地编写 super,但这很可能取决于我使用的 Python 版本: super(CustomTreeWidget, self).drawBranches(painter, rect, index)
    猜你喜欢
    • 2018-08-13
    • 1970-01-01
    • 2012-09-20
    • 2018-09-06
    • 1970-01-01
    • 1970-01-01
    • 2022-08-11
    • 2013-02-07
    • 2011-05-29
    相关资源
    最近更新 更多