![](/img/trans.png)
[英]How to change background color of selected or clicked cell in a pyqt5 QTableWidget?
[英]PyQt5 : Change font color in one cell if row is selected (QAbstractTableModel)
我有一个带有模型的QTableView
,如果我选择一行,我想更改特定列中的前景色。 我用QStyledItemDelegate
尝试了一些东西,但没有任何效果。 有人可以帮助我吗?
tableView
的SelectionBehavior
是SelectRows
。
使用 Tableview 上的 StyleSheets,我将颜色设置为'color:rgb(255,255,255)'
并将选择颜色设置为'color:rgb(255, 181, 62)'
。 但是如果我选择一行,第 8 列的颜色应该保持为'color:rgb(255,255,255)'
非常感谢您
编辑:
from PyQt5 import QtWidgets
from PyQt5 import QtGui
class reportDelegate(QtWidgets.QStyledItemDelegate):
def initStyleOption(self, option, index):
super(reportDelegate, self).initStyleOption(option, index)
color = QtGui.QColor(255,255,255)
if index.column() == 8:
color = QtGui.QColor(255,255,255)
if option.state & QtWidgets.QStyle.State_Selected:
option.palette.setColor(QtGui.QPalette.Normal, QtGui.QPalette.HighlightedText, QtGui.QColor(255,255,255))
else:
if option.state & QtWidgets.QStyle.State_Selected:
option.palette.setColor(QtGui.QPalette.Normal, QtGui.QPalette.HighlightedText, QtGui.QColor(255, 181, 62))
option.palette.setBrush(QtGui.QPalette.Text, color)
现在我知道了。 有用。 但我还有另一个问题。 当我双击一行时,会打开一个 QDialog。 如果 QDialog 打开,则所选行的颜色切换为黑色,但应保持白色。 我不知道所选行的状态,但是不活动或其他行,所以我不知道在这种状态下如何使行变白。
编辑:现在它工作正常。 我在尝试某些东西的同时停用了颜色。 现在我再次激活它,该行保持白色。
如果有人对上述所有事情有更好的解决方案,我将不胜感激。
用于选定项目的前景(“文本”)颜色是使用HighlightedText
ColorRole
设置的。
当您还指定ColorGroup
时,颜色集将仅对该选定组有效,如果未设置继承的角色,则恢复为父(或系统)调色板。
如果视图变为非活动状态(又名:未聚焦),并且您明确设置了另一个颜色组的颜色(在您的情况下为Normal
),Qt 将为任何其他角色和/或组使用默认颜色。
您需要为角色和所有颜色组设置调色板颜色,因此完全省略颜色组:
class reportDelegate(QtWidgets.QStyledItemDelegate):
def initStyleOption(self, option, index):
super().initStyleOption(option, index)
if index.column() == 8:
highlightColor = QtGui.QColor(255, 255, 255)
else:
highlightColor = QtGui.QColor(255, 181, 62)
option.palette.setColor(QtGui.QPalette.HighlightedText,
highlightColor)
笔记:
QColor
或Qt.GlobalColor
参数(无论如何它在内部创建 QBrush 对象);setStyleSheet()
与::item
选择器一起使用,并且background
属性将始终覆盖背景,无论是否设置了Qt.BackgroundRole
(请参阅此相关答案;QStyle.State_Selected
通常与这种检查无关,因为样式总是会验证状态; 忽略状态,无论如何设置调色板颜色,让默认实现完成剩下的工作; 这很重要,因为paint()
负责最终选择要使用的实际颜色;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.