gpt4 book ai didi

python - pyqt - 将颜色与现有数据一起放入 QTableView 中

转载 作者:行者123 更新时间:2023-11-30 23:37:21 24 4
gpt4 key购买 nike

我需要帮助来为我的 QTableView 着色。 @rainer 帮助我在初始化表格时添加颜色,但现在,我已经有一个包含数据的表格(但没有颜色//我的数据是在我的表格中打开的 csv),我想创建一个按钮,当单击它时在某些行中为表格 View 着色,例如当有一行带有-2(数据)时,它将是蓝色的。-- 我有一个按钮和一张 table 。此按钮将 csv 数据加载到我的表格 View 中。我想要一个新按钮来为该表的行着色。 (例如,仅对具有 -2 数据的行进行着色)一些代码:

    self.fileName = (_fromUtf8('tweets.csv'))
self.tableView = QTableView(self.tabSentimento)
self.tableView.setGeometry(QRect(550,10,510,700))
self.tableView.setObjectName(_fromUtf8("TabelaSentimento"))
self.tableView.setModel(self.model)
self.tableView.horizontalHeader().setStretchLastSection(True)

self.pushButtonLoad = QPushButton(self.tabSentimento)
self.pushButtonLoad.setGeometry(QRect(550,720,130,30))
self.pushButtonLoad.setObjectName(_fromUtf8("buttonLoadCSV"))
self.pushButtonLoad.setText(QApplication.translate("Form", "Process!", None, QApplication.UnicodeUTF8))
self.pushButtonLoad.setStyleSheet('color:red;background-color:rgb(255, 255, 153);border:1px solid purple;')
self.pushButtonLoad.clicked.connect(self.on_pushButtonLoad_clicked)


def loadCsv(self, fileName):
with open(fileName, "rb") as fileInput:
for row in csv.reader(fileInput):
items = [
QStandardItem(field)
for field in row
]
self.model.appendRow(items)

def on_pushButtonLoad_clicked(self):
print self.fileName
self.loadCsv(self.fileName)

最佳答案

例如,您可以对模型进行子类化并重新实现 data 方法,如果选中 pushButtonColorize 且值该单元格等于1。它也会影响同一行的单元格。

#!/usr/bin/env python
#-*- coding:utf-8 -*-

import sip
sip.setapi('QString', 2)
sip.setapi('QVariant', 2)

import random
from PyQt4 import QtGui, QtCore

class MyStandardItemModel(QtGui.QStandardItemModel):
_colorize = False
def __init__(self, parent=None):
super(MyStandardItemModel, self).__init__(parent)

def setColorized(self, state):
self._colorize = state

def data(self, index, role=QtCore.Qt.DisplayRole):
if role == QtCore.Qt.BackgroundColorRole \
and not self._colorize:
return QtGui.QBrush()

return super(MyStandardItemModel, self).data(index, role)

class MyWindow(QtGui.QWidget):
def __init__(self, parent=None):
super(MyWindow, self).__init__(parent)

self.pushButtonColorize = QtGui.QPushButton(self)
self.pushButtonColorize.setText("Colorize Cells!")
self.pushButtonColorize.setCheckable(True)
self.pushButtonColorize.toggled.connect(self.on_pushButtonColorize_toggled)

self.pushButtonReload = QtGui.QPushButton(self)
self.pushButtonReload.setText("Reload Data!")
self.pushButtonReload.clicked.connect(self.on_pushButtonReload_clicked)

self.modelSource = MyStandardItemModel(self)

self.tableView = QtGui.QTableView(self)
self.tableView.horizontalHeader().setStretchLastSection(True)
self.tableView.setModel(self.modelSource)

self.layoutVertical = QtGui.QVBoxLayout(self)
self.layoutVertical.addWidget(self.pushButtonReload)
self.layoutVertical.addWidget(self.pushButtonColorize)
self.layoutVertical.addWidget(self.tableView)

self.pushButtonReload.click()

@QtCore.pyqtSlot()
def on_pushButtonReload_clicked(self):
self.modelSource.clear()

for rowNumber in range(3):
items = []
for columnNumber in range(3):
item = QtGui.QStandardItem()
item.setText(str(random.getrandbits(1)))

items.append(item)

self.modelSource.appendRow(items)

if self.pushButtonColorize.isChecked():
self.on_pushButtonColorize_toggled(True)

@QtCore.pyqtSlot(bool)
def on_pushButtonColorize_toggled(self, state):
self.modelSource.setColorized(state)

rowCount = self.modelSource.rowCount()
columnCount = self.modelSource.columnCount()

for rowNumber in range(rowCount):
for columnNumber in range(columnCount):
cellIndex = self.modelSource.index(rowNumber, columnNumber)
cellData = self.modelSource.data(cellIndex, QtCore.Qt.DisplayRole)

if str(cellData).isdigit() \
and int(cellData) == 1:
for cellColumn in range(columnCount):
self.modelSource.setData(
self.modelSource.index(rowNumber, cellColumn),
QtGui.QColor(QtCore.Qt.blue),
QtCore.Qt.BackgroundColorRole
)

self.modelSource.endResetModel()

if __name__ == "__main__":
import sys

app = QtGui.QApplication(sys.argv)
app.setApplicationName('MyWindow')

main = MyWindow()
main.resize(333, 222)
main.show()

sys.exit(app.exec_())

关于python - pyqt - 将颜色与现有数据一起放入 QTableView 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15666635/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com