Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 12, 2014 13:24:18

Patrik
От:
Зарегистрирован: 2011-04-21
Сообщения: 70
Репутация: +  0  -
Профиль   Отправить e-mail  

PYQT4 QTableWidget

Добрый день.

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

Как можно реализовать эту задачку?



Офлайн

#2 Ноя. 12, 2014 13:56:26

ksk-
От:
Зарегистрирован: 2010-05-06
Сообщения: 59
Репутация: +  0  -
Профиль   Отправить e-mail  

PYQT4 QTableWidget

Для случая с QTableWidget, наверное, только со стилями что-то делать. И то не уверен.
А вот если бы ты использовал Model/View, то мог бы определить BackgroundColorRole для ячеек.



Офлайн

#3 Ноя. 12, 2014 16:18:59

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2756
Репутация: +  184  -
Профиль   Отправить e-mail  

PYQT4 QTableWidget

Как-то так:

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)



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#4 Ноя. 12, 2014 16:26:34

Patrik
От:
Зарегистрирован: 2011-04-21
Сообщения: 70
Репутация: +  0  -
Профиль   Отправить e-mail  

PYQT4 QTableWidget

Rodegast получается закрашивать можно только по ячейкам, а всю строку сразу закрасить нельзя?



Офлайн

#5 Ноя. 12, 2014 19:37:28

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2756
Репутация: +  184  -
Профиль   Отправить e-mail  

PYQT4 QTableWidget

Насколько я помню нельзя. Если хочешь закрашивать сразу всю строку - используй QTreewidget.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#6 Дек. 3, 2014 11:43:19

Patrik
От:
Зарегистрирован: 2011-04-21
Сообщения: 70
Репутация: +  0  -
Профиль   Отправить e-mail  

PYQT4 QTableWidget

Получится закрасить строку, если в место QTableWidget использовать QTableView?



Офлайн

#7 Дек. 3, 2014 12:23:31

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2756
Репутация: +  184  -
Профиль   Отправить e-mail  

PYQT4 QTableWidget

Получится. Как заметил ksk- для этого надо в модели выдавать данные для BackgroundColorRole.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#8 Дек. 3, 2014 12:57:21

Patrik
От:
Зарегистрирован: 2011-04-21
Сообщения: 70
Репутация: +  0  -
Профиль   Отправить e-mail  

PYQT4 QTableWidget

Есть возможность написать пример???

md =

Раскидать массив в таблицу на три колонки с названиями 1, 2, 3
И выделить строчку, где в ячейке найдется в буква ‘e’



Отредактировано Patrik (Дек. 3, 2014 12:58:14)

Офлайн

#9 Дек. 3, 2014 13:16:57

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2756
Репутация: +  184  -
Профиль   Отправить e-mail  

PYQT4 QTableWidget

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_())



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#10 Дек. 3, 2014 13:27:46

Patrik
От:
Зарегистрирован: 2011-04-21
Сообщения: 70
Репутация: +  0  -
Профиль   Отправить e-mail  

PYQT4 QTableWidget

Странно, у меня отображается окно, а в нём таблица с заголовком.
Но самих данных в таблице нет.

Единственное, что поменял в коде:
import PySide.QtGui as QtGui
import PySide.QtCore as QtCore
на:
from PyQt4 import QtCore, QtGui



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version