Advertisement
pblnrao

QTableView Sort

Dec 20th, 2012
328
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.07 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on Fri Dec 21 11:03:37 2012
  4.  
  5. @author: narasimhapbl.1863
  6. """
  7.  
  8. import re
  9. import operator
  10. import os
  11. import sys
  12. from PyQt4.QtCore import *
  13. from PyQt4.QtGui import *
  14.  
  15. def main():
  16.     app = QApplication(sys.argv)
  17.     w = MyWindow()
  18.     w.show()
  19.     sys.exit(app.exec_())
  20.  
  21. class MyWindow(QWidget):
  22.     def __init__(self, *args):
  23.         QWidget.__init__(self, *args)
  24.  
  25.         # create table
  26.         self.get_table_data()
  27.         table = self.createTable()
  28.          
  29.         # layout
  30.         layout = QVBoxLayout()
  31.         layout.addWidget(table)
  32.         self.setLayout(layout)
  33.  
  34.     def get_table_data(self):
  35.         self.tabledata = [['001','01','blk'],['002','01','NA'],['003','02','NA'],['004','02','NA'],['005','03','blk'],]
  36.  
  37.     def createTable(self):
  38.         # create the view
  39.         tv = QTableView()
  40.  
  41.         # set the table model
  42.         header = ['Sh_Code', 'Sh_Seq', 'Stage']
  43.         tm = MyTableModel(self.tabledata, header, self)
  44.         tv.setModel(tm)
  45.  
  46.         # set the minimum size
  47.         tv.setMinimumSize(400, 300)
  48.  
  49.         # hide grid
  50.         tv.setShowGrid(True)
  51.  
  52.         # set the font
  53.         font = QFont("Courier New", 8)
  54.         tv.setFont(font)
  55.  
  56.         # hide vertical header
  57.         vh = tv.verticalHeader()
  58.         vh.setVisible(False)
  59.  
  60.         # set horizontal header properties
  61.         hh = tv.horizontalHeader()
  62.         hh.setStretchLastSection(True)
  63.  
  64.         # set column width to fit contents
  65.         tv.resizeColumnsToContents()
  66.  
  67.         # set row height
  68.         nrows = len(self.tabledata)
  69.         for row in xrange(nrows):
  70.             tv.setRowHeight(row, 18)
  71.  
  72.         # enable sorting
  73.         tv.setSortingEnabled(True)
  74.  
  75.         return tv
  76.  
  77. class MyTableModel(QAbstractTableModel):
  78.     def __init__(self, datain, headerdata, parent=None, *args):
  79.         """ datain: a list of lists
  80.            headerdata: a list of strings
  81.        """
  82.         QAbstractTableModel.__init__(self, parent, *args)
  83.         self.arraydata = datain
  84.         self.headerdata = headerdata
  85.  
  86.     def rowCount(self, parent):
  87.         return len(self.arraydata)
  88.  
  89.     def columnCount(self, parent):
  90.         return len(self.arraydata[0])
  91.  
  92.     def data(self, index, role):
  93.         if not index.isValid():
  94.             return QVariant()
  95.         elif role != Qt.DisplayRole:
  96.             return QVariant()
  97.         return QVariant(self.arraydata[index.row()][index.column()])
  98.  
  99.     def headerData(self, col, orientation, role):
  100.         if orientation == Qt.Horizontal and role == Qt.DisplayRole:
  101.             return QVariant(self.headerdata[col])
  102.         return QVariant()
  103.  
  104.     def sort(self, Ncol, order):
  105.         """Sort table by given column number.
  106.        """
  107.         self.emit(SIGNAL("layoutAboutToBeChanged()"))
  108.         self.arraydata = sorted(self.arraydata, key=operator.itemgetter(Ncol))        
  109.         if order == Qt.DescendingOrder:
  110.             self.arraydata.reverse()
  111.         self.emit(SIGNAL("layoutChanged()"))
  112.  
  113. if __name__ == "__main__":
  114.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement