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

PyQt6中Qt.UserRole报错及TreeView进度条代理不显示问题求助

问题解决步骤

1. 修正枚举引用错误

PyQt6中,DisplayRole、UserRole这类数据角色枚举被归类到Qt.ItemDataRole下,直接通过Qt.UserRole访问会触发AttributeError,正确写法是Qt.ItemDataRole.UserRole。你已经完成这一步,这是解决第一个报错的关键。

2. 修复进度条不显示的核心问题

你的代码里进度条不显示主要有两个原因:

  • 委托绑定到了不存在的列:你调用setItemDelegateForColumn(1),但模型中只添加了第0列的内容(每个QStandardItem默认属于第0列),委托没作用到目标列上。
  • 自定义paint方法未处理基础样式:直接绘制进度条可能会覆盖item的默认文本,或因样式冲突导致显示异常。

修改后的完整代码

import sys
from PyQt6 import QtWidgets, QtGui
from PyQt6.QtCore import Qt

class ProgressBarDelegate(QtWidgets.QStyledItemDelegate):
    def paint(self, painter, option, index):
        # 获取进度数据,默认值避免空数据报错
        progress = index.data(Qt.ItemDataRole.UserRole) or 0.0

        # 先绘制父类的基础样式(保留item文本和默认背景)
        super().paint(painter, option, index)

        # 绘制进度条,留出边距避免覆盖文本
        painter.save()
        progress_rect = option.rect.adjusted(5, 5, -5, -5)
        progress_rect.setWidth(int(progress_rect.width() * progress))
        painter.fillRect(progress_rect, QtGui.QColor("#00c0ff"))
        painter.restore()

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()

        self.tree_view = QtWidgets.QTreeView(self)
        self.setCentralWidget(self.tree_view)

        self.model = QtGui.QStandardItemModel(self)
        self.tree_view.setModel(self.model)

        # 添加数据项
        for i in range(10):
            item = QtGui.QStandardItem(f"Item {i}")
            progress = i / 10
            # 使用正确的枚举角色存储进度数据
            item.setData(progress, Qt.ItemDataRole.UserRole)
            self.model.appendRow(item)

        # 将委托绑定到实际存在的第0列
        self.tree_view.setItemDelegateForColumn(0, ProgressBarDelegate(self))

app = QtWidgets.QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec())

关键改动说明

  • 统一使用Qt.ItemDataRole.UserRole访问数据角色,匹配PyQt6的枚举结构。
  • 将委托绑定到第0列,确保作用到有数据的目标列。
  • 在自定义绘制前调用父类paint方法,保留item的默认文本显示。
  • 调整进度条矩形边距,优化显示效果,避免覆盖文本内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 09:16:14