python - 在 qtreewidget pyqt5 中格式化子项
问题描述
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)
在这里,我在 STYLESHEET 中将高度设置为 80px。但我想将子项的高度设置为 40 像素,将顶层项目的高度设置为 80 像素。我怎么做?提前致谢
解决方案
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_())
推荐阅读
- regex - RegEx 用于 4 个字符和 7 个数字。没有特殊字符
- javascript - 在 Selenium 中抓取网页的 Javascript 渲染元素
- symfony - symfony & translation : 如何翻译标准表达和形式?
- java - spring boot 在 application.properties 中使用 spring.profile.default 时未加载默认配置文件
- php - 如何用键为search_string的数组的值替换单词(search_string)
- c# - WithConstructorArgument 上的 Ninject 错误:没有可用的匹配绑定,并且类型不是自绑定的
- android - 在活动仍处于打开状态时进行多次通话
- node.js - 如何从 API Gateway 中的自定义授权方返回 401 Unauthorized 而不会导致 Lambda 错误?
- amazon-web-services - 如何将小部件添加到 AWS 中的现有控制面板?
- java - 捕获异常并重新抛出它,但这不是异常