使用QSqlQueryModel创建交替背景色的表格模型

python 复制代码
class UserModel(QSqlQueryModel):
    def __init__(self):
        super().__init__()
        self._query = "SELECT name, age FROM users"
        self.refresh()

    def refresh(self):
        self.setQuery(self._query)

    # 重新定义data()方法
    def data(self, index, role):   
        if role == Qt.BackgroundRole :  # 如果角色是背景色
            if index.row() % 2 == 0:    # 偶数行
                return QColor("#a0a0a0")
            else:
                return QColor("#f0f0f0")
        return super().data(index, role)   # 其余角色继承父类的data()方法

这段代码重新定义模型的data()方法,接收参数 index 和 role。如果 role 的值等于 Qt.BackgroundRole,表示设置背景色。如果 index 的行索引值除以 2 的余数为 0,即偶数行,返回颜色对象 QColor ("#a0a0a0"),否则返回 QColor ("#f0f0f0")。如果 role 不是 Qt.BackgroundRole,就调用父类的 data 方法并返回结果。

利用这个方法,可以实现一些其他的特制显示,比如,在上面的基础上增加一个功能:判断一个单元格的数字是否大于某一个设定值,如果大于设定值就显示为红色:

python 复制代码
class UserModel(QSqlQueryModel):
    def __init__(self):
        super().__init__()
        self._query = "SELECT name, age FROM users"
        self.refresh()

    def refresh(self):
        self.setQuery(self._query)

    def data(self, index, role):
        if role == Qt.BackgroundRole :  # 检查是否是背景颜色角色
            if index.row() % 2 == 0:
                return QColor("#a0a0a0")
            else:
                return QColor("#f0f0f0")
        elif role == Qt.ForegroundRole:  # 检查是否是文字颜色角色
            if index.column() == 1:  # 检查是否是 age 列
                value = self.record(index.row()).value(index.column())  # 获取单元格的值

                try:
                # 尝试将值转换为浮点数进行比较
                    if float(value) > 10:
                        return QColor(Qt.red)  # 如果大于设定值,返回红色
                except (ValueError, TypeError):
                    # 如果值不能转换为浮点数,忽略颜色设置
                    pass


        return super().data(index, role)
相关推荐
Tansmjs10 分钟前
使用Python自动收发邮件
jvm·数据库·python
m0_5613596713 分钟前
用Python监控系统日志并发送警报
jvm·数据库·python
Dxy123931021624 分钟前
MySQL INSERT ... ON DUPLICATE KEY UPDATE 与非主键唯一字段
数据库·mysql
zhousenshan1 小时前
springboot事务管理几种方式
数据库
布局呆星1 小时前
SQLite数据库的介绍与使用
数据库·python
2401_838472511 小时前
用Python和Twilio构建短信通知系统
jvm·数据库·python
石头wang1 小时前
oracle jdbc 依赖以及对dbeaver的性能影响,如何选择oracle驱动, oracle jdbc 驱动
数据库·oracle
weixin_452159551 小时前
如何从Python初学者进阶为专家?
jvm·数据库·python
深蓝海拓2 小时前
PySide6从0开始学习的笔记(二十五) Qt窗口对象的生命周期和及时销毁
笔记·python·qt·学习·pyqt
2301_790300962 小时前
用Python读取和处理NASA公开API数据
jvm·数据库·python