如何设置 QTableView CSS 样式

Posted

技术标签:

【中文标题】如何设置 QTableView CSS 样式【英文标题】:How to style QTableView CSS 【发布时间】:2015-01-31 19:29:28 【问题描述】:

设置QTableView 项目checkboxes 的正确CSS 语法是什么?由于 QCheckBox 是 QTableView 的一部分,因此使用 CSS 进入复选框很棘手......

from PyQt4.QtCore import *
from PyQt4.QtGui import *
import sys

appStyle="""

QTableView

    alternate-background-color: #1F1F1F;
    background-color: gray;
    gridline-color: gray;
    color: gray;

QTableView::item 
   
    color: white;        


QTableView::item:focus
   
    color: gray;
    background: #0063cd;            
        
QTableView::item:selected
   
    color: gray;
    background: #0063cd;            


QCheckBox::indicator:checked, QCheckBox::indicator:unchecked
    color: #b1b1b1;
    background-color: #323232;
    border: 1px solid #b1b1b1;
    border-radius: 1px;
    width: 7px;
    height: 7px;
    margin: 0px 5px 0 5px;


"""
class Model(QAbstractTableModel):
    def __init__(self, parent=None, *args):
        QAbstractTableModel.__init__(self, parent, *args)
        self.items = ['Item_001','Item_002','Item_003']
    def rowCount(self, parent=QModelIndex()):
        return len(self.items)      
    def columnCount(self, parent=QModelIndex()):
        return 1
    def flags (self, index):
        return Qt.ItemIsEnabled | Qt.ItemIsUserCheckable | Qt.ItemIsSelectable
    def data(self, index, role):
        if not index.isValid(): return QVariant()
        if role==Qt.DisplayRole:    return QVariant(self.items[index.row()])             
        elif role == Qt.CheckStateRole:   return QVariant(Qt.Checked)
        else:            return QVariant()

class MyWindow(QTableView):
    def __init__(self, *args):        
        QTableView.__init__(self, *args)
        tableModel=Model(self)
        self.setModel(tableModel)
        self.setStyleSheet(appStyle)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = MyWindow()
    w.show()
    sys.exit(app.exec_())

【问题讨论】:

使用QTableView QCheckBox::indicator:checked /*...*/ 选择器。请注意,这仅适用于您拥有真正的复选框小部件。我建议你为此使用代表。 我正在使用复选框作为在 sourceModel 的 data() 方法中使用 if role == Qt.CheckStateRole: return QVariant(Qt.Checked) 的结果。让我看看这是否仍然有效......谢谢你的想法! 很遗憾QTableView QCheckBox::indicator:checked...) 不起作用.... 【参考方案1】:

我认为它与QCheckBox::indicatorQListView::indicatorQTreeView::indicator.... 类似。尝试:

QTableView::indicator:checked 
    color: #b1b1b1;
    background-color: #323232;
    border: 1px solid #b1b1b1;
    border-radius: 1px;
    width: 7px;
    height: 7px;
    margin: 0px 5px 0 5px;
 

【讨论】:

以上是关于如何设置 QTableView CSS 样式的主要内容,如果未能解决你的问题,请参考以下文章

如何为 QTableView 中的当前项目设置样式表

如何设置qtableview中的qcombobox的显示样式

如何更改 QTableView 边框颜色?

如何在 QTableView 中将 QColor 作为 QBackgroundRole 返回,它在 PyQt5 中具有预设样式表?

qt QTableView/QTableWidget样式设置

qt qtableview 样式设置