【问题标题】:How to contro QTableView Item's outline如何控制 QTableView 项目的大纲
【发布时间】:2015-02-15 12:24:21
【问题描述】:

下面的示例代码创建了一个链接到QAbstractTableModelQTableView

正在应用黑色背景:

p=self.palette()
p.setColor(self.backgroundRole(), QtGui.QColor("#0F0F0F"))
self.setPalette(p) 

不幸的是,每个 tableview 项目(“Animals”、“Birds”和“Fish”)周围都有一个白色的轮廓/边框。

问题:如何为项目的白色边框着色?

    import sys, os
    from PyQt4 import QtCore, QtGui
    app=QtGui.QApplication(sys.argv)


    class TableModel(QtCore.QAbstractTableModel):
        def __init__(self):
            QtCore.QAbstractTableModel.__init__(self)        
            self.items=['Animals','Birds','Fish']

        def rowCount(self, parent=QtCore.QModelIndex()):   
            return len(self.items)
        def columnCount(self, index=QtCore.QModelIndex()):
            return 1

        def data(self, index, role):
            if not index.isValid() or not (0<=index.row()<len(self.items)):
                return QtCore.QVariant()

            item=str(self.items[index.row()])

            if role==QtCore.Qt.UserRole:
                return item
            if role==QtCore.Qt.DisplayRole:
                return item
            if role==QtCore.Qt.TextColorRole:
                return QtCore.QVariant(QtGui.QColor(QtCore.Qt.white))

        def headerData(self, column, orientation, role=QtCore.Qt.DisplayRole):
            if role!=QtCore.Qt.DisplayRole:   return QtCore.QVariant()
            if orientation==QtCore.Qt.Horizontal: return QtCore.QVariant('My Column Name') 

    class TableView(QtGui.QTableView):
        def __init__(self, parent=None):
            super(TableView, self).__init__(parent)

            self.setBackgroundRole(QtGui.QPalette.Base)

            p=self.palette()
            p.setColor(self.backgroundRole(), QtGui.QColor("#0F0F0F"))
            self.setPalette(p)

            myModel=TableModel()
            self.setModel(myModel)       

            self.horizontalHeader().setResizeMode(QtGui.QHeaderView.Stretch)
            self.horizontalHeader().setDefaultAlignment(QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter)


    view=TableView()
    view.show()   
    sys.exit(app.exec_())

稍后编辑:

这是实现了 CSS 方法的工作代码:

from PyQt4 import QtCore, QtGui
app=QtGui.QApplication(sys.argv)

class TableModel(QtCore.QAbstractTableModel):
    def __init__(self):
        QtCore.QAbstractTableModel.__init__(self)        
        self.items=['Animals','Birds','Fish']

    def rowCount(self, parent=QtCore.QModelIndex()):   
        return len(self.items)
    def columnCount(self, index=QtCore.QModelIndex()):
        return 1

    def data(self, index, role):
        if not index.isValid() or not (0<=index.row()<len(self.items)):
            return QtCore.QVariant()

        item=str(self.items[index.row()])

        if role==QtCore.Qt.UserRole:
            return item
        if role==QtCore.Qt.DisplayRole:
            return item
        if role==QtCore.Qt.TextColorRole:
            return QtCore.QVariant(QtGui.QColor(QtCore.Qt.white))

    def headerData(self, column, orientation, role=QtCore.Qt.DisplayRole):
        if role!=QtCore.Qt.DisplayRole:   return QtCore.QVariant()
        if orientation==QtCore.Qt.Horizontal: return QtCore.QVariant('My Column Name') 

class TableView(QtGui.QTableView):
    def __init__(self, parent=None):
        super(TableView, self).__init__(parent)
        self.horizontalHeader().setResizeMode(QtGui.QHeaderView.Stretch)
        self.horizontalHeader().setDefaultAlignment(QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter)        

        myModel=TableModel()
        self.setModel(myModel)      

        appStyle="""
        QTableView
        {   
            background-color: black;
            gridline-color:black;
            color: black;
            selection-color: black;
        }
        QTableView::item 
        {   
            color: white;
            background:black;            
        }
        QTableView::item:hover
        {   
            color: black;
            background:#ffaa00;            
        }
        QTableView::item:focus
        {   
            color: black;
            background:#0063cd;            
        }        
        """
        self.setStyleSheet(appStyle)

view=TableView()
view.show()   
sys.exit(app.exec_())

【问题讨论】:

    标签: python qt pyqt pyside qtableview


    【解决方案1】:

    Qt 样式表在样式方面非常强大,我推荐它们。与

    self.setStyleSheet('QTableView::item{background:black;} QTableView{gridline-color:black;}')
    

    而不是 setPalette 在您的示例中,您实现了表格的黑色项目和黑色网格线。您可以使用样式表做更多事情,例如在选中项目时更改项目的背景。请参阅stylesheet reference

    【讨论】:

    猜你喜欢
    • 2015-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2021-10-02
    相关资源
    最近更新 更多