PyQt ForegroundRole

2010-04-29 Thread SC
Hello, I've been struggling getting
ForegroundRolehttp://doc.trolltech.com/4.6/qt.htmlto work properly
so I can change the text color of certain cells in
QTableView.
I took an example from http://www.daniweb.com/forums/thread191210-7.html and
added the following in the data(...) method:

elif role == Qt.ForegroundRole:
return QBrush(QColor(255, 0, 0))

When I run it on my Windows PC, the font color is set to red for all the
cells but does not seem to have an effect on my N900.

Is there any Maemo-specific calls that I am missing here?



# http://www.daniweb.com/forums/thread191210-7.html

import operator
from PyQt4.QtCore import *
from PyQt4.QtGui import *

class MyWindow(QWidget):
def __init__(self, data_list, header, *args):
QWidget.__init__(self, *args)
# setGeometry(x_pos, y_pos, width, height)
self.setGeometry(300, 200, 420, 250)
self.setWindowTitle(Exploring PyQT's QTableView)

table_model = MyTableModel(self, data_list, header)
table_view = QTableView()
table_view.setModel(table_model)
# enable sorting
table_view.setSortingEnabled(True)

layout = QVBoxLayout(self)
layout.addWidget(table_view)
self.setLayout(layout)


class MyTableModel(QAbstractTableModel):
def __init__(self, parent, mylist, header, *args):
QAbstractTableModel.__init__(self, parent, *args)
self.mylist = mylist
self.header = header

def rowCount(self, parent):
return len(self.mylist)

def columnCount(self, parent):
return len(self.mylist[0])

def data(self, index, role):
if not index.isValid():
return QVariant()
# -
# Works on Windows PC but not on N900
# -
elif role == Qt.ForegroundRole:
return QBrush(QColor(255, 0, 0))
elif role != Qt.DisplayRole:
return QVariant()
return QVariant(self.mylist[index.row()][index.column()])

def headerData(self, col, orientation, role):
if orientation == Qt.Horizontal and role == Qt.DisplayRole:
return QVariant(self.header[col])
return QVariant()

def sort(self, col, order):
sort table by given column number col
self.emit(SIGNAL(layoutAboutToBeChanged()))
self.mylist = sorted(self.mylist,
key=operator.itemgetter(col))
if order == Qt.DescendingOrder:
self.mylist.reverse()
self.emit(SIGNAL(layoutChanged()))


header = ['First Name', 'Last Name', 'Age', 'Weight']
# a list of (name, age, weight) tuples
data_list = [
('Heidi', 'Kalumpa', '36', '127'),
('Frank', 'Maruco', '27', '234'),
('Larry', 'Pestraus', '19', '315'),
('Serge', 'Romanowski', '59', '147'),
('Carolus', 'Arm', '94', '102'),
('Michel', 'Sargnagel', '21', '175')
]

app = QApplication([])
win = MyWindow(data_list, header)
win.show()
app.exec_()
___
maemo-developers mailing list
maemo-developers@maemo.org
https://lists.maemo.org/mailman/listinfo/maemo-developers


Re: PyQt ForegroundRole

2010-04-29 Thread Ram Kurvakat
Not a 100% sure, but I think this is due to the QMaemo5 style implementation 
you are not able to do it.
Think Ive faced the issue before.

Is there a chance you could try with a delegate for your columns, thats worked 
for me.
Implementing the paint().

P.S. i dont use python, I use C++, hence I didnt paste the example.

cheers,
Ram
- Original Message -
From: SC
Sent: 04/29/10 11:16 AM
To: maemo-developers@maemo.org
Subject: PyQt ForegroundRole

Hello, I've been struggling getting ForegroundRole 
http://doc.trolltech.com/4.6/qt.html  to work properly so I can change the text 
color of certain cells in QTableView.
 I took an example from http://www.daniweb.com/forums/thread191210-7.html 
http://www.daniweb.com/forums/thread191210-7.html  and added the following in 
the data(...) method:

 elif role == Qt.ForegroundRole:
 return QBrush(QColor(255, 0, 0))

When I run it on my Windows PC, the font color is set to red for all the cells 
but does not seem to have an effect on my N900.

Is there any Maemo-specific calls that I am missing here?


# http://www.daniweb.com/forums/thread191210-7.html 
http://www.daniweb.com/forums/thread191210-7.html 

import operator
from PyQt4.QtCore import *
from PyQt4.QtGui import *

class MyWindow(QWidget):
 def __init__(self, data_list, header, *args):
 QWidget.__init__(self, *args)
 # setGeometry(x_pos, y_pos, width, height)
 self.setGeometry(300, 200, 420, 250)
 self.setWindowTitle(Exploring PyQT's QTableView)

 table_model = MyTableModel(self, data_list, header)
 table_view = QTableView()
 table_view.setModel(table_model)
 # enable sorting
 table_view.setSortingEnabled(True)

 layout = QVBoxLayout(self)
 layout.addWidget(table_view)
 self.setLayout(layout)

class MyTableModel(QAbstractTableModel):
 def __init__(self, parent, mylist, header, *args):
 QAbstractTableModel.__init__(self, parent, *args)
 self.mylist = mylist
 self.header = header

 def rowCount(self, parent):
 return len(self.mylist)

 def columnCount(self, parent):
 return len(self.mylist[0])

 def data(self, index, role):
 if not index.isValid():
 return QVariant()
 # -
 # Works on Windows PC but not on N900
 # -
 elif role == Qt.ForegroundRole:
 return QBrush(QColor(255, 0, 0))
 elif role != Qt.DisplayRole:
 return QVariant()
 return QVariant(self.mylist[index.row()][index.column()])

 def headerData(self, col, orientation, role):
 if orientation == Qt.Horizontal and role == Qt.DisplayRole:
 return QVariant(self.header[col])
 return QVariant()

 def sort(self, col, order):
 sort table by given column number col
 self.emit(SIGNAL(layoutAboutToBeChanged()))
 self.mylist = sorted(self.mylist,
 key=operator.itemgetter(col))
 if order == Qt.DescendingOrder:
 self.mylist.reverse()
 self.emit(SIGNAL(layoutChanged()))

header = ['First Name', 'Last Name', 'Age', 'Weight']
# a list of (name, age, weight) tuples
data_list = [
('Heidi', 'Kalumpa', '36', '127'),
('Frank', 'Maruco', '27', '234'),
('Larry', 'Pestraus', '19', '315'),
('Serge', 'Romanowski', '59', '147'),
('Carolus', 'Arm', '94', '102'),
('Michel', 'Sargnagel', '21', '175')
]

app = QApplication([])
win = MyWindow(data_list, header)
win.show()
app.exec_()
___
maemo-developers mailing list
maemo-developers@maemo.org
https://lists.maemo.org/mailman/listinfo/maemo-developers