Как сменить цвет текста всей строки 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_())


