python - QFileSystemModel QTableView 日期修改突出显示

标签 python pyqt qtableview qfilesystemmodel

我正在尝试使用 QFileSystemModel 和 QTableView 制作一个小型文件浏览器。

我想知道是否可以突出显示“修改日期”列中具有相同值的行,例如,如果我有两个或多个今天修改的文件,则行会以绿色突出显示, 昨天修改的内容以绿色但较浅的阴影等突出显示。

最佳答案

要更改背景颜色,有多种选项,例如:

  • 重写模型的data()方法,以便返回值与角色Qt.BackgroundRole关联。

  • 使用 QIdentityProxyModel 修改与 Qt.BackgroundRole 关联的值,与之前的选项类似

  • 使用QStyledItemDelegate修改QStyleOptionViewItembackgroundBrush属性。

最简单的选项是最后一个选项,因此我将展示您的实现:

from PyQt5 import QtCore, QtGui, QtWidgets


class DateDelegate(QtWidgets.QStyledItemDelegate):
    def initStyleOption(self, option, index):
        super().initStyleOption(option, index)
        model = index.model()
        if isinstance(model, QtWidgets.QFileSystemModel):
            dt = model.lastModified(index)

            today = QtCore.QDateTime.currentDateTime()
            yesterday = today.addDays(-1)
            if dt < yesterday:
                option.backgroundBrush = QtGui.QColor(0, 255, 0)
            else:
                option.backgroundBrush = QtGui.QColor(0, 155, 0)


def main():
    import sys

    app = QtWidgets.QApplication(sys.argv)

    path_dir = QtCore.QDir.currentPath()

    view = QtWidgets.QTableView()
    model = QtWidgets.QFileSystemModel()
    view.setModel(model)
    model.setRootPath(path_dir)

    view.setRootIndex(model.index(path_dir))

    view.show()

    delegate = DateDelegate(view)
    view.setItemDelegate(delegate)

    sys.exit(app.exec_())


if __name__ == "__main__":
    main()

关于python - QFileSystemModel QTableView 日期修改突出显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62377343/

相关文章:

linux - 如何在 Linux 上编译 QScintilla 和 Eric6?

python - 在连接的项目更改时更新自定义 QGraphicsItem 的位置

c++ - 使用来自不同线程的实时数据更新 QTableView 的最佳策略

qt - 如何使用多个 ProgressBars 的进度数据更新 TableView?

python - 我如何让模块认为它的名字是 __main__?

python - 如何使用 fetchmany 将 mysql 表转储到 csv 中

python - PYQT如何编辑在MainWindow中tab化的QDockWidget的标题?

python - 将索引移动到列

python - 返回 True 和 None 与 True 和 False 是 Pythonic 吗?

c++ - 如何从选定行(QTableView)中获取单元格值?