Как сменить цвет текста всей строки QTableWidget по условию ячейки этой строки PyQt5

Как переписать этот код, чтобы по условию изменяло цвет текста во всех ячейках строки где условие выполнилось?

from PyQt5.QtWidgets import QApplication, QStyledItemDelegate, QTableWidget 
from PyQt5.QtGui import QColor, QPalette


class ColorDelegate(QStyledItemDelegate):
    def paint(self, painter, option, index):
        if index.data() == 'Online':
            option.palette.setColor(QPalette.Text, QColor("green"))
        elif index.data() == 'Offline':
            option.palette.setColor(QPalette.Text, QColor("red"))
        QStyledItemDelegate.paint(self, painter, option, index)


if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    w = QTableWidget(3, 3)
    w.setItemDelegate(ColorDelegate())
    w.show()
    sys.exit(app.exec_())

введите сюда описание изображения


Ответы (1 шт):

Автор решения: S. Nick

Попробуйте так:

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *


class ColorDelegate(QStyledItemDelegate):
    signalColor = pyqtSignal(str, int)
    
    def paint(self, painter, option, index):
        if index.column() == 1:                                        # !!!
            if index.data() == 'Online':
                option.palette.setColor(QPalette.Text, QColor("green"))
                self.signalColor.emit("green", index.row())
            elif index.data() == 'Offline':
                option.palette.setColor(QPalette.Text, QColor("red"))
                self.signalColor.emit("red", index.row())
            else:  
                self.signalColor.emit("black", index.row())
                
        QStyledItemDelegate.paint(self, painter, option, index)



class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        
        self.centralwidget = QtWidgets.QWidget()
        self.setCentralWidget(self.centralwidget)
        
        self.tableWidget = QTableWidget(3, 3)
        self.delegate = ColorDelegate() 
        self.delegate.signalColor.connect(self.signal_color)
        self.tableWidget.setItemDelegate(self.delegate)

        layout = QVBoxLayout(self.centralwidget)
        layout.addWidget(self.tableWidget)
        
        for r in range(self.tableWidget.rowCount()):
            for c in range(self.tableWidget.columnCount()):
                self.tableWidget.setItem(r, c, QTableWidgetItem(f"{r}-{c}")) 
        
        
    def signal_color(self, text, row):
        for col in range(self.tableWidget.columnCount()):    
            item = QTableWidgetItem()   
            item = self.tableWidget.item(row, col)
            if item:
                self.tableWidget.item(row, col).setForeground(QColor(text))
     

if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    app.setFont(QFont("Times", 13, QFont.Bold))
    w = MainWindow()
    w.resize(400, 200)
    w.show()
    sys.exit(app.exec_())

введите сюда описание изображения

введите сюда описание изображения

→ Ссылка