from PyQt4 import QtGui, QtCore, QtSql
from PyQt4.QtGui import *
import sys
def main():
w = MyWindow()
w.show()
sys.exit(app.exec_())
def __init__(self, *args):
# connect to db (if doesn't exist, it's auto-created)
self.db.setDatabaseName('test.db')
self.db.open()
#create a table in db and add some data
query.exec_("DROP TABLE IF EXISTS games")
query.exec_("CREATE TABLE games(id INTEGER PRIMARY KEY, hometeam TEXT, visitorteam TEXT) ")
query.exec("INSERT INTO games (hometeam, visitorteam) VALUES ('Star', 'Eagles')")
query.exec("INSERT INTO games (hometeam, visitorteam) VALUES ('Best team', 'Reds');")
query.exec("INSERT INTO games (hometeam, visitorteam) VALUES ('NonWinners', 'Loosers');")
query.exec("INSERT INTO games (hometeam, visitorteam) VALUES ('North', 'South');")
query.exec("INSERT INTO games (hometeam, visitorteam) VALUES ('East', 'west');")
# set the model
model.setQuery("SELECT * FROM games")
proxy_model = ExtraRolesProxyModel(self)#QtGui.QStandardItemModel(0, 2)
proxy_model.setSourceModel(model);
self.setModel(proxy_model)
# paint first two rows
#model.setRowsToBeColored([0,3])
rowsToBeColored = []
for i in range(0, 2):
rowsToBeColored.append(i)
#model.setRowsToBeColored(rowsToBeColored)
model.setData(index, QtCore.Qt.red, QtCore.Qt.BackgroundRole)
class ExtraRolesProxyModel(QIdentityProxyModel ):
def __init__(self, dbcursor=None):
super(ExtraRolesProxyModel, self).__init__()
#self.m_extraRoles = []
def data(self, index, role):
hashKey = index.row() << 32 | index.column()
tableIter = self.m_extraRoles.constFind(hashKey)
if tableIter==self.m_extraRoles.constEnd:
roleIter = tableIter.value().constFind(role)
if roleIter==tableIter.value().constEnd():
return roleIter.value()
def setData(self, index, value, role=None):
if not index.isValid():
return False
hashKey = index.row() << 32 | index.column()
if value:
self.m_extraRoles[hashKey][role] = value
self.dataChanged.emit(index,index)
return True;
tableIter = self.m_extraRoles.find(hashKey)
if tableIter== self.m_extraRoles.end():
return False
roleIter = tableIter.value().find(role)
if roleIter==tableIter.value().end():
return False
tableIter.value().erase(roleIter)
if tableIter.value().isEmpty():
self.m_extraRoles.erase(tableIter)
self.dataChanged.emit(index, index)
return True
if __name__ == "__main__":
main()