форматирование дочерних элементов в qtreewidget pyqt5 - PullRequest
0 голосов
/ 07 октября 2018
STYLESHEET = '''QTreeWidget {border:None} 
    QTreeWidget::Item {height: 80px; 
                       border-bottom:2px solid black;
                       color: rgba(255,255,255,255);}   /* +++ */

    QTreeView {
        alternate-background-color: rgba(170,170,170,255);
        background: rgba(211,211,211,255);}'''
self.treeWidget = QTreeWidget()
self.treeWidget.setAlternatingRowColors(True)
self.treeWidget.setStyleSheet(STYLESHEET)

Здесь я установил высоту 80px в STYLESHEET.Но я хочу установить высоту 40px для дочерних элементов и 80px для toplevelitem.Как я могу это сделать?Заранее спасибо

1 Ответ

0 голосов
/ 09 октября 2018

Таблица стилей Qt является общей, в случае QTreeWidget нет селектора, который бы различал родителей и детей, поэтому другой вариант - использовать делегата, как показано ниже:

from PyQt5 import QtCore, QtWidgets

STYLESHEET = '''QTreeWidget {border:None} 
    QTreeWidget::Item{
        border-bottom:2px solid black;
        color: rgba(255,255,255,255);
    }
    QTreeView{
        alternate-background-color: rgba(170,170,170,255);
        background: rgba(211,211,211,255);
    }'''


class StyledItemDelegate(QtWidgets.QStyledItemDelegate):
    def sizeHint(self, option, index):
        s = super(StyledItemDelegate, self).sizeHint(option, index)
        if index.parent().isValid():
            s.setHeight(40)
        else:
            s.setHeight(80)
        return s


class Widget(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(Widget, self).__init__(parent)
        self.treeWidget = QtWidgets.QTreeWidget()
        delegate = StyledItemDelegate(self.treeWidget)
        self.treeWidget.setItemDelegate(delegate)
        self.treeWidget.setAlternatingRowColors(True)
        self.treeWidget.setStyleSheet(STYLESHEET)
        lay = QtWidgets.QVBoxLayout(self)
        lay.addWidget(self.treeWidget)
        for i in range(5):
            it = QtWidgets.QTreeWidgetItem(["parent {}".format(i)])
            self.treeWidget.addTopLevelItem(it)
            for j in range(5):
                child = QtWidgets.QTreeWidgetItem(["children {}{}".format(i, j)])
                it.addChild(child)


if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = Widget()
    w.show()
    sys.exit(app.exec_())

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...