对于一个包含数据的现有表,您希望在其中迭代特定列,您可以执行以下操作:
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):
...