簡體   English   中英

從qtablewidget列中檢索數據

[英]Retrieving data from columns qtablewidget

我想擁有一個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型,以保存它。 因為如果您的單元格實際上是“ WARNING”,那么首先將其轉換為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):
    ...

Joaquin的觀點是,您正在將一個字符串(newitem.text())與另一個字符串('20')進行比較。 這是一個字母比較-例如,即使數字3 <數字200,也是'3' > '200' 。您所描述的規則是數字之間的比較,因此您需要將newitem.text()轉換為a數。

請注意,即使您在小部件中輸入“數字”,它們也會作為字符串存儲和檢索。 int(newitem.text())將其轉換為數字。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM