Форум сайта python.su
Добрый день.
Возникла такая ситуация, есть таблица 12 столбцов.
Есть некое условие, которое проверяет данные в 12 столбце и если оно совпало, то строка выделяется каким-нибудь цветом.
Как можно реализовать эту задачку?
Офлайн
Для случая с QTableWidget, наверное, только со стилями что-то делать. И то не уверен.
А вот если бы ты использовал Model/View, то мог бы определить BackgroundColorRole для ячеек.
Офлайн
Как-то так:
item = QtGui.QTableWidgetItem() brush = QtGui.QBrush(QtGui.QColor(255, 0, 0)) brush.setStyle(QtCore.Qt.SolidPattern) item.setBackground(brush) self.tableWidget.setItem(0, 0, item)
Офлайн
Rodegast получается закрашивать можно только по ячейкам, а всю строку сразу закрасить нельзя?
Офлайн
Насколько я помню нельзя. Если хочешь закрашивать сразу всю строку - используй QTreewidget.
Офлайн
Получится закрасить строку, если в место QTableWidget использовать QTableView?
Офлайн
Получится. Как заметил ksk- для этого надо в модели выдавать данные для BackgroundColorRole.
Офлайн
Есть возможность написать пример???
md =
Раскидать массив в таблицу на три колонки с названиями 1, 2, 3
И выделить строчку, где в ячейке найдется в буква ‘e’
Отредактировано Patrik (Дек. 3, 2014 12:58:14)
Офлайн
import sys import PySide.QtGui as QtGui import PySide.QtCore as QtCore class Model(QtCore.QAbstractTableModel): def __init__(self, parent): QtCore.QAbstractTableModel.__init__(self) self.kolonki = [] self.rowItem =[] def rowCount(self, parent): return len(self.rowItem) def columnCount(self, parent): return len(self.kolonki) def data(self, index, role): if role == QtCore.Qt.DisplayRole and index.isValid(): return self.rowItem[index.row()][index.column()] if role == QtCore.Qt.BackgroundColorRole: if "e" in self.rowItem[index.row()]: return QtGui.QColor(255, 0, 0) def headerData(self, section, orientation, role): if orientation == QtCore.Qt.Horizontal and role == QtCore.Qt.DisplayRole: return self.kolonki[section] if orientation == QtCore.Qt.Vertical and role == QtCore.Qt.DisplayRole: return section+1 def setupModelData(self, kolonki, data): self.beginResetModel() self.kolonki = kolonki map(self.rowItem.append, data) self.endResetModel() class MainWindow(QtGui.QMainWindow): def __init__(self, parent): QtGui.QMainWindow.__init__(self, parent) self.table = QtGui.QTableView(self) self.table.setAlternatingRowColors(True) model = Model(self.table) data = [ ['a','b','c'], ['d','e','y'] ] model.setupModelData(['1', '2', '3'], data) self.table.setModel(model) self.setCentralWidget(self.table) if __name__ == "__main__": app = QtGui.QApplication(sys.argv) Window = MainWindow(None) Window.show() sys.exit(app.exec_())
Офлайн
Странно, у меня отображается окно, а в нём таблица с заголовком.
Но самих данных в таблице нет.
Единственное, что поменял в коде:
import PySide.QtGui as QtGui
import PySide.QtCore as QtCore
на:
from PyQt4 import QtCore, QtGui
Офлайн