在QTableview中的特定行中设置不同的背景颜色

时间:2015-07-30 13:10:25

标签: background qtableview

您好,我如何更改QTableview中特定行的背景颜色?

我想知道使用哪种方法。

我有方法seleckRow但是点击另一个方法,颜色不会保留在选定的行中。

__author__ = 'jordiponsisala'
import sys
from PyQt5.QtWidgets import QDialog, QApplication
from PyQt5.QtSql import *
from PyQt5 import  QtWidgets
from Llistats import modificarLineal

def crearConeccio():
    db = QSqlDatabase.addDatabase("QMYSQL")
    db.setHostName("localhost")
    db.setDatabaseName("ProvaDB")
    db.setUserName("root")
    db.setPassword("password")
    db.open()
    print (db.lastError().text())
    return True


class clasArticles(QDialog, modificarLineal.Ui_Dialog):
    def __init__(self, parent=None):
        super(clasArticles, self).__init__(parent)
        self.setupUi(self)
        self.setWindowTitle('Posu el nom que vulgui')

        self.model= QSqlRelationalTableModel(self)
        self.model.setTable('preu')

        #self.model.setEditStrategy(QSqlRelationalTableModel.OnFieldChange)
        self.model.setEditStrategy(QSqlTableModel.OnFieldChange)
        self.model.setRelation(2,QSqlRelation("probeedors", "id", "nomProbeedor"))
        self.model.select()
        self.tableView.setModel(self.model)
        self.tableView.setItemDelegate(QSqlRelationalDelegate(self.model))
        self.tableView.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
        self.tableView.selectRow(1)

        self.filtrarLineal.clicked.connect(self.filtrarRecords)
        self.cancelarLineal.clicked.connect(self.cancelRecords)
        self.afegirLineal.clicked.connect(self.insertRecords)
        self.eliminarLineal.clicked.connect(self.deleteRecords)
        self.seleccionar.clicked.connect(self.seleccionarCodi)
        self.tableView.doubleClicked.connect(self.probes_index)
        self.tableView.activated.connect(self.actualitzarRecords)# Pres intro method

    def probes_index(self):# metod for print index in row
        indexes = self.tableView.selectionModel().selectedRows()
        for index in sorted(indexes):
            self.lblnomSeleccionat.setText(str(index.row()))


    def seleccionarCodi(self):
        index = self.tableView.selectedIndexes()[0]

        id_seleccionat = str(self.tableView.model().data(index))
        print ("index : " + str(id_seleccionat))

        self.lblnomSeleccionat.setText(str(id_seleccionat))

    def actualitzarRecords(self):
        index_0 = self.tableView.selectedIndexes()[0]
        index_id = str(self.tableView.model().data(index_0))
        index_2 = self.tableView.selectedIndexes()[1]
        index_probeedor_id = str(self.tableView.model().data(index_2))
        index_3 = self.tableView.selectedIndexes()[3]
        index_preuTarifa = str(self.tableView.model().data(index_3))

        self.model = QSqlQueryModel(self)
        self.model.setQuery("UPDATE `ProvaDB`.`preu` SET `preuTarifa`="+index_preuTarifa+" WHERE `id`="+index_id+" and`probeedors_id`="+index_probeedor_id+"")

    def cancelRecords(self):
        self.model.revertAll()

    def insertRecords(self):
        self.model.insertRow(self.tableView.currentIndex().row())

    def deleteRecords(self):
        self.model.removeRow(self.tableView.currentIndex().row())
        self.model.submitAll()

    def filtrarRecords(self):
        self.model.setFilter("preu.id = '"+self.txtEditFiltre.text()+"%'")


if __name__ == '__main__':

    app = QApplication(sys.argv)
    if not crearConeccio():
        sys.exit(1)

    formMod = clasArticles()
    formMod.show()
    sys.exit(app.exec_())

0 个答案:

没有答案