On Monday 25 November 2002 22:44, Hans-Peter Jansen wrote:

[snip]
> > Overloading QListView shouldn't give a performance degradation because
> > it's only called once. Nothing compared to how many times MyListViewItem
> > is called.
>
> I can imagine this would give a nice example. If you like to share some
> code, I'm going to prepare one.

Here an example of a listview that colours positive items green, zeros orange 
and negative values red...

from qt import *

class ColorListItem(QListViewItem):
        def __init__(self, *args):
                QListViewItem.__init__(self, *args)
        # Overridden to color changes that are positive green, negative red, and 0 
orange
        def paintCell(self, painter, qg, column, width, align):

                if column ==0:
                        try:
                          pstr = float(str(self.text(column)))
                        except:
                          pstr = 0
                        if pstr > 0:
                                #Green
                                qg.setColor(QColorGroup.Text, QColor(0,155,0))
                        elif pstr < 0:
                                #Red
                                qg.setColor(QColorGroup.Text, QColor(200,0,0))
                        else:
                                #Orange
                                qg.setColor(QColorGroup.Text, QColor(255,100,0))

                QListViewItem.paintCell(self, painter, qg, column, width, align)
        
        def key(self, column, asc):
                if column == 0:
                        try:
                          tmp = float(str(self.text(column)))
                        except:
                          tmp = 0
                        #A bit of a hack to sort numerical values
                        return "%015d" % (tmp*100+100000)
                else:
                        return QListViewItem.key(self, column, asc)

class ColorList(QListView):
        def __init__(self, *args):
                apply(QListView.__init__, (self, )+ args)

                #Set name of columns
                self.addColumn("Color")

                #Set width of columns
                self.setColumnWidth(0, 150)

                #Set alignment to the right
                self.setColumnAlignment(0, 2)

                self.setAllColumnsShowFocus(1)

                i = -100

                while i < 200:
                        ColorListItem(self, str(i))
                        i+=1


Hopefully this example is nice enough? I think this is problably one of the 
few cases where you need to make an C++ implementation because of speed. It 
would be nice if calling (overloaded) methods in the next version of Python 
would be speedier!! On my computer it's about ten times slower than directly 
calling QListViewItem in both populating the listview and sorting.

Cheers,
Vincent

> > > If this all don't work for you, then I'm afraid you have to implement
> > > your derived class in C++ and use sip to bind this and use it from
> > > Python.
> >
> > I'm affraid so too, but shouldn't give that many troubles. I've also
> > tried Psyco but that didn't give a speed boost either.
> >
> > Thanks for the reply
> >
> > Vincent
>
> Bye,
> Hans-Peter
>
> _______________________________________________
> PyKDE mailing list    [EMAIL PROTECTED]
> http://mats.gmd.de/mailman/listinfo/pykde

_______________________________________________
PyKDE mailing list    [EMAIL PROTECTED]
http://mats.gmd.de/mailman/listinfo/pykde

Reply via email to