[英]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.