You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyQt5 QTreeWidget禁用选中单元格特殊高亮样式问题

解决Fusion样式下QTreeWidget选中行的单元格高亮残留问题

问题背景

在使用Fusion样式的QDialog中,QTreeWidget需要实现:选中整行时显示#3399ff蓝色背景+白色文字,且行内单元格不能出现额外的高亮效果。目前点击单元格时会出现异常高亮,尝试自定义QStyledItemDelegate后仍有黑色矩形残留。

原TreeWidget样式:

QTreeWidget::item{
    height:60px;
}

QTreeWidget::item:selected{
    background-color:#3399ff;
}

尝试的Delegate代码逻辑混乱,仅部分解决问题,无法彻底消除残留。


彻底解决方案

无需复杂自定义Delegate,通过设置选择行为+优化样式表即可彻底解决问题:

1. 设置TreeWidget的选择行为

确保TreeWidget默认选中整行而非单个单元格:

self.treeWidget.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
# 可选:根据需求设置选择模式,例如单选
self.treeWidget.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection)

2. 优化样式表覆盖Fusion默认高亮

通过样式表直接取消单元格选中时的额外边框和高亮,同时指定整行选中的样式:

QTreeWidget {
    selection-background-color: #3399ff;
}
QTreeWidget::item {
    height: 60px;
    color: black; /* 默认文字颜色 */
}
QTreeWidget::item:selected {
    background-color: #3399ff;
    color: white; /* 选中行文字设为白色 */
}
/* 关键:清除单元格选中时的默认边框和高亮 */
QTreeWidget::item:selected:focus {
    border: none;
    background-color: #3399ff;
}

完整修改示例

在setupUi函数末尾添加选择行为设置并替换原有样式表:

def setupUi(self, Dialog):
    # ... 保留原UI初始化代码 ...
    
    # 设置整行选中行为
    self.treeWidget.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
    self.treeWidget.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection)
    
    # 应用新样式表
    self.treeWidget.setStyleSheet("""
        QTreeWidget {
            selection-background-color: #3399ff;
        }
        QTreeWidget::item{
            height:60px;
            color: black;
        }
        QTreeWidget::item:selected{
            background-color:#3399ff;
            color: white;
        }
        QTreeWidget::item:selected:focus {
            border: none;
            background-color: #3399ff;
        }
    """)

原有Delegate失效原因

原有Delegate的判断逻辑错误:仅处理当前点击的单元格而非整行;且先调用默认绘制再手动叠加绘制,导致样式冲突出现残留。Fusion样式的单元格高亮是默认行为,通过样式表直接覆盖比自定义Delegate更高效可靠。

内容的提问来源于stack exchange,提问作者Chris P

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 08:56:10