<br><font size=3><br></font><br><font size=3>A while back, I had asked the group how I could implement
a numeical sort on a TableWidget.</font><br><font size=3>Someone kindly showed me how to implement a model, associated
with a TableView. The sample code was posted here: </font><a href=http://diotavelli.net/PyQtWiki/Sorting%20numbers%20in%20columns target=_blank><font size=3 color=blue><u>http://diotavelli.net/PyQtWiki/Sorting%20numbers%20in%20columns</u></font></a><br><font size=3> </font><br><font size=3>I'm having problems implementing this in my app. In this
simple example, I use Qt Designer to create a MainForm containing a TableView
(gridView), a LineEdit (queryBox) and a PushButton (runQueryBtn).</font><br><font size=3>The designer files (.ui and ui_xxx.py) generated defines
the TableView in a couple of lines - I have not used the Designer to change
any of the default object properties.</font><br><font size=3> </font><br><font size=3>The problem I have is that the TableView remains
blank. I do not understand what I'm missing, as I tried to follow the same
workflow as provided by the code linked-to above..</font><br><font size=3>The code works, in that the data I want to display is
retrieved from a database and I receive no runtime warnings or errors.</font><br><font size=3> </font><br><font size=3>Any help is greatly appreciated... this is probably one
of those simple newbie errors.</font><br><font size=3> </font><br><font size=3>My application shell is as follows:</font><br><font size=3> </font><br><font size=3><i>import os<br>import platform<br>import sys<br>import locale<br>import random</i></font><br><font size=3><i>from PyQt4.QtCore import  *<br>from PyQt4.QtGui import *<br>from PyQt4.QtSql import *<br>from ui_SortedTableView import *</i></font><br><font size=3> </font><br><font size=3><b><i>class NumberSortModel(QSortFilterProxyModel): </i></b></font><br><font size=3><b><i>    def lessThan(self, left, right):<br>        lvalue = left.data().toDouble()[0]<br>        rvalue = right.data().toDouble()[0]<br>        return lvalue < rvalue</i></b></font><br><font size=3><b><i><br>class AppShell(QMainWindow,Ui_MainWindow):<br>    def __init__(self,parent=None):<br>        super(AppShell,self).__init__(parent)<br>        self.setupUi(self)<br>        self.updateUi()</i></b></font><br><font size=3> </font><br><font size=3><i>    def updateUi(self):<br>        self.connect(self.runQuerybtn,SIGNAL("clicked()"),self.runQuerySlot)<br>        #setup the grid:<br>        #self.gridView.setMinimumSize(1000,600)<br>        self.queryBox.setText("Select
Issuer, Cusip, Holding From Bonds Where Holding> 1000")<br>        #fill grid with initial data
set:<br>        self.runQuery()</i></font><br><font size=3> </font><br><font size=3><i>    def runQuerySlot(self):<br>        #run query with current sql
string input:<br>        self.runQuery()</i></font><br><font size=3><i>##<br>    def runQuery(self):<br>        self.query = self.queryBox.text()<br>        self.updateGrid()</i></font><br><font size=3> </font><br><font size=3><i>    <b>def updateGrid(self):</i></b></font><br><font size=3><b><i><br>        data = self.getData()<br>        <br>        proxy = NumberSortModel()<br>        <br>        self.gridView.setSortingEnabled(False)<br>        print len(data), len(data[0])<br>        model = QStandardItemModel(len(data),len(data[0]))<br>       # model = QStandardItemModel(15,5)</i></b></font><br><font size=3><b><i>        <br>        r = -1<br>        for row in data:<br>            r=r+1<br>            c=-1<br>            for
col in row:<br>               
c=c+1<br>               
item = QStandardItem()<br>               
item.setData(QVariant(col),Qt.DisplayRole)<br>               
model.setItem(r,c,item)<br>            <br>        #retrieve headings from the
fields in the Select query (does not work for 'Select * ' queries)<br>        querystring = str(self.query)<br>        querystring=querystring.upper()<br>        cut1 = querystring.find("SELECT
")+5<br>        cut2 = querystring.find("FROM")<br>        labels = querystring[cut1+1:cut2].split(",")</i></b></font><br><font size=3><b><i>    <br>        for i in range(len(labels)):<br>                      
proxy.setHeaderData(i,Qt.Horizontal, QVariant(str(labels[i])))</i></b></font><br><font size=3><b><i>       <br>        proxy.setSourceModel(model)<br><br>        self.gridView.setModel(proxy)<br>        self.gridView.setSortingEnabled(True)</i></b><i><br>        <br>    def getData(self):<br>       ........ this retrieves data
from a database and fills a List ('datatable'). Each list item is itself
a list of size 3.....<br>        return datatable<br>    <br>       </i></font><br><font size=3><b><i>if __name__=="__main__":<br>    import sys<br>    app = QApplication(sys.argv)<br>    form=AppShell()<br>    form.show()<br>    app.exec_()</i></b><br>    </font><br><br><BR>
<BR>
<BR>
CONFIDENTIALITY WARNING<BR>
This e-mail message, including any attachment(s), is confidential. If we sent this communication to you in error, please do not disclose it to anyone else or use the information in it. Please notify the sender of the transmission error and then delete our communication from your system without printing, copying or forwarding it.  Thank you for your co-operation.<BR>
<BR>
AVERTISSEMENT CONCERNANT LE CARACTERE CONFIDENTIEL DE L'INFORMATION<BR>
<BR>
Le present courriel, y compris toute piece qui y est jointe, est confidentiel. Si nous vous avons envoye cette communication par erreur, nous vous prions de ne la divulguer a personne ni a utiliser l’information qu’elle contient. Veuillez informer l’expediteur de l’erreur de transmission et effacer ensuite notre communication de votre systeme sans l’imprimer, ni la copier ni la retransmettre. Nous vous remercions de votre cooperation.<BR>
<BR>
<BR>