我想有一个tablewidget将颜色一些基于特定的条件和门槛行。 例如,如果在一列中的数据达到了20,它将色彩行如该20了。 我只搜索整个Qtablewidgetitem,并没有做我想做的事情。
def setmydata(self):
for n, key in enumerate(self.data):
for m, item in enumerate(self.data[key]):
newitem = QtGui.QTableWidgetItem(item)
c = newitem.column() + 2
print c
for items in item:
if newitem.text() >= '20' or newitem.text() == 'WARNING':
newitem.setBackground(QtGui.QBrush(QtCore.Qt.yellow))
else:
pass
self.setItem(m, n, newitem)
如果你的细胞中含有的整数,你应该尝试:
int(newitem.text()) >= 20
对于现有的表,有数据,要遍历一个特定的列,你会做这样的事情:
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):
...
华金的观点是,你是一个比较字符串(newitem.text())与另一个字符串(“20”)。 这是按字母顺序比较- '3' > '200'
,例如,即使数3 <数200你要描述的规则号之间的比较,所以需要newitem.text()转换为一个数。
请注意,即使你正在进入“数字”到小工具,它们的存储和检索的字符串。 int(newitem.text())
把它放回一个数字。