【问题标题】:PyQT: Overriding highlighted text color in TableViewPyQT:覆盖 TableView 中突出显示的文本颜色
【发布时间】:2013-04-04 02:20:02
【问题描述】:

我有一个表格视图,其中每个单元格都有自定义文本颜色。选择行时,颜色将更改为默认的 highlightText 值(白色)。当行也被选中时,如何保持定义的 ForegroundRole 分配颜色?感谢您的帮助。

【问题讨论】:

    标签: pyqt


    【解决方案1】:

    您或许可以使用自定义委托来实现此目的。

    here的提示试试这个。

    from PyQt4 import QtGui, QtCore
    import sys
    
    
    class CustomSelectColorDelegate(QtGui.QStyledItemDelegate):
    
        def __init__(self, parent = None):
            super(CustomSelectColorDelegate, self).__init__(parent)
    
        def paint(self, painter, option, index):
            painter.save()
    
            # set background color
            if option.state & QtGui.QStyle.State_Selected:
                painter.setBrush(QtGui.QBrush(QtCore.Qt.white))
            else:
                painter.setBrush(QtGui.QBrush(QtCore.Qt.red))
            painter.drawRect(option.rect)
    
            # set text color
            if option.state & QtGui.QStyle.State_Selected:
                painter.setPen(QtGui.QPen(QtCore.Qt.red))
            else:
                painter.setPen(QtGui.QPen(QtCore.Qt.white))
    
            value = index.data(QtCore.Qt.DisplayRole)
            if value.isValid():
                text = value.toString()
                painter.drawText(option.rect, QtCore.Qt.AlignLeft | QtCore.Qt.AlignCenter, text)
    
            painter.restore()
    
    
    if __name__ == '__main__':
    
        app = QtGui.QApplication(sys.argv)
        mw = QtGui.QWidget()
    
        tableViewer0 = QtGui.QTableWidget()
    
        newitem1 = QtGui.QTableWidgetItem('this is standard text')
        newitem2 = QtGui.QTableWidgetItem('this is custom text')
    
        tableViewer0.setColumnCount(2)
        tableViewer0.insertRow(0)
        tableViewer0.setItem(0, 0, newitem1)
        tableViewer0.setItem(0, 1, newitem2)
    
        customSelectColorDelegate = CustomSelectColorDelegate()
        tableViewer0.setItemDelegateForColumn(1, customSelectColorDelegate)
    
    
        vbox = QtGui.QVBoxLayout()
        vbox.addWidget(tableViewer0)
        mw.setLayout(vbox)
        mw.show()
        sys.exit(app.exec_())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-18
      • 2021-11-19
      • 2016-03-29
      • 2018-03-19
      • 2011-05-06
      • 2021-12-04
      • 2014-12-15
      • 1970-01-01
      相关资源
      最近更新 更多