QFileSystemModel QTableView 日期修改高亮显示
QFileSystemModel QTableView Date Modified highlighting
我正在尝试使用 QFileSystemModel 和 QTableView 制作一个小型文件浏览器。
我想知道是否可以突出显示 "Date Modified" 列中具有相同值的行,例如,如果我有两个或多个今天修改过的文件,行会以绿色突出显示,
昨天修改的那些以绿色但较浅的阴影等突出显示
要更改背景颜色,有几个选项,例如:
覆盖模型的data()
方法,使return值与角色Qt.BackgroundRole
相关联。
使用 QIdentityProxyModel 修改与 Qt.BackgroundRole
关联的值,类似于前面的选项
用一个QStyledItemDelegate
修改QStyleOptionViewItem
的backgroundBrush
属性.
最简单的选项是最后一个选项,所以我将展示您的实现:
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()
我正在尝试使用 QFileSystemModel 和 QTableView 制作一个小型文件浏览器。
我想知道是否可以突出显示 "Date Modified" 列中具有相同值的行,例如,如果我有两个或多个今天修改过的文件,行会以绿色突出显示, 昨天修改的那些以绿色但较浅的阴影等突出显示
要更改背景颜色,有几个选项,例如:
覆盖模型的
data()
方法,使return值与角色Qt.BackgroundRole
相关联。使用 QIdentityProxyModel 修改与
Qt.BackgroundRole
关联的值,类似于前面的选项用一个
QStyledItemDelegate
修改QStyleOptionViewItem
的backgroundBrush
属性.
最简单的选项是最后一个选项,所以我将展示您的实现:
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()