从列检索数据QTableWidget的(Retrieving data from columns q

2019-09-21 04:57发布

我想有一个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)

Answer 1:

如果你的细胞中含有的整数,你应该尝试:

int(newitem.text()) >= 20


Answer 2:

对于现有的表,有数据,要遍历一个特定的列,你会做这样的事情:

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):
    ...


Answer 3:

华金的观点是,你是一个比较字符串(newitem.text())与另一个字符串(“20”)。 这是按字母顺序比较- '3' > '200' ,例如,即使数3 <数200你要描述的规则号之间的比较,所以需要newitem.text()转换为一个数。

请注意,即使你正在进入“数字”到小工具,它们的存储和检索的字符串。 int(newitem.text())把它放回一个数字。



文章来源: Retrieving data from columns qtablewidget