Найти - Пользователи
Полная версия: PYQT4 QTableWidget
Начало » GUI » PYQT4 QTableWidget
1 2
Patrik
Добрый день.

Возникла такая ситуация, есть таблица 12 столбцов.
Есть некое условие, которое проверяет данные в 12 столбце и если оно совпало, то строка выделяется каким-нибудь цветом.

Как можно реализовать эту задачку?
ksk-
Для случая с QTableWidget, наверное, только со стилями что-то делать. И то не уверен.
А вот если бы ты использовал Model/View, то мог бы определить BackgroundColorRole для ячеек.
Rodegast
Как-то так:
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)
Patrik
Rodegast получается закрашивать можно только по ячейкам, а всю строку сразу закрасить нельзя?
Rodegast
Насколько я помню нельзя. Если хочешь закрашивать сразу всю строку - используй QTreewidget.
Patrik
Получится закрасить строку, если в место QTableWidget использовать QTableView?
Rodegast
Получится. Как заметил ksk- для этого надо в модели выдавать данные для BackgroundColorRole.
Patrik
Есть возможность написать пример???

md =

Раскидать массив в таблицу на три колонки с названиями 1, 2, 3
И выделить строчку, где в ячейке найдется в буква ‘e’
Rodegast
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_())
Patrik
Странно, у меня отображается окно, а в нём таблица с заголовком.
Но самих данных в таблице нет.

Единственное, что поменял в коде:
import PySide.QtGui as QtGui
import PySide.QtCore as QtCore
на:
from PyQt4 import QtCore, QtGui
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB