Для существующей таблицы с данными, где вы хотите выполнить итерацию по определенному столбцу, вы должны сделать что-то вроде этого:
def process_column(table, processCol=0):
for row in xrange(table.rowCount()):
item = table.item(row, processCol)
text = str(item.text())
if (text.isdigit() and int(text) >= 20) or text == 'WARNING':
item.setBackground(QtGui.QBrush(QtCore.Qt.yellow))
Или, чтобы установить цвет всей строки, вам нужно будет перебрать столбцы, чтобы получить каждый элемент строки, когда есть совпадение:
def process_column(table, processCol=0):
colCount = table.rowCount()
for row in xrange(table.rowCount()):
item = table.item(row, processCol)
text = str(item.text())
if (text.isdigit() and int(text) >= 20) or text == 'WARNING':
for col in xrange(colCount):
item = table.item(row, col)
item.setBackground(QtGui.QBrush(QtCore.Qt.yellow))
Как указывалось и в других вопросах, вам нужно сравнивать int с int вместо сравнения строк. Что я сделал здесь, так это сначала проверил, что ячейка на самом деле была int, чтобы сохранить ее. Потому что, если ваша ячейка на самом деле была «ПРЕДУПРЕЖДЕНИЕ», то сначала преобразование ее в int приведет к сбою.
В любом случае вам понадобится ссылка на QTableWidget
, даже если функция находится в другом классе. Это означает, что вам нужно будет заранее настроить свой сигнал со ссылкой на таблицу, если этот другой класс никогда конкретно не узнает об этом. Примером этого может быть использование обратного вызова partial
, который привязывает к нему таблицу:
from functools import partial
class Foo:
def __init__(self):
self.the_table = QTableWidget()
# create a callback with the table bound as first arg
callback = partial(process_column, self.the_table)
# set some signal that emits a column number
self.process_column_signal.connect(callback)
def some_method(self):
# process column 0
self.process_column_signal.emit(0)
# will get called by process_column_signal with the table
def process_column(table, processCol):
...
person
jdi
schedule
15.08.2012