特定の列を反復処理するデータを含む既存のテーブルの場合、次のようにします。
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):
...