Last active
August 17, 2023 22:38
-
-
Save MarshallChris/6019350 to your computer and use it in GitHub Desktop.
Attempt to derive QtCore.QAbstractTableModel in PyQt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf-8 -*- | |
""" | |
Created on Wed Jul 17 10:50:56 2013 | |
@author: cmarshall | |
""" | |
import sip | |
sip.setapi('QString', 1) | |
sip.setapi('QVariant', 1) | |
import pandas as pd | |
from PyQt4 import QtCore, QtGui | |
class TableModel(QtCore.QAbstractTableModel): | |
def __init__(self, parent=None, *args): | |
super(TableModel, self).__init__() | |
self.datatable = None | |
def update(self, dataIn): | |
print 'Updating Model' | |
self.datatable = dataIn | |
print 'Datatable : {0}'.format(self.datatable) | |
def rowCount(self, parent=QtCore.QModelIndex()): | |
return len(self.datatable.index) | |
def columnCount(self, parent=QtCore.QModelIndex()): | |
return len(self.datatable.columns.values) | |
def data(self, index, role=QtCore.Qt.DisplayRole): | |
#print 'Data Call' | |
#print index.column(), index.row() | |
if role == QtCore.Qt.DisplayRole: | |
i = index.row() | |
j = index.column() | |
#return QtCore.QVariant(str(self.datatable.iget_value(i, j))) | |
return '{0}'.format(self.datatable.iget_value(i, j)) | |
else: | |
return QtCore.QVariant() | |
def flags(self, index): | |
return QtCore.Qt.ItemIsEnabled | |
class TableView(QtGui.QTableView): | |
""" | |
A simple table to demonstrate the QComboBox delegate. | |
""" | |
def __init__(self, *args, **kwargs): | |
QtGui.QTableView.__init__(self, *args, **kwargs) | |
if __name__=="__main__": | |
from sys import argv, exit | |
class Widget(QtGui.QWidget): | |
""" | |
A simple test widget to contain and own the model and table. | |
""" | |
def __init__(self, parent=None): | |
QtGui.QWidget.__init__(self, parent) | |
l=QtGui.QVBoxLayout(self) | |
cdf = self.get_data_frame() | |
self._tm=TableModel(self) | |
self._tm.update(cdf) | |
self._tv=TableView(self) | |
self._tv.setModel(self._tm) | |
l.addWidget(self._tv) | |
def get_data_frame(self): | |
df = pd.DataFrame({'Name':['a','b','c','d'], | |
'First':[2.3,5.4,3.1,7.7], 'Last':[23.4,11.2,65.3,88.8], 'Class':[1,1,2,1], 'Valid':[True, True, True, False]}) | |
return df | |
a=QtGui.QApplication(argv) | |
w=Widget() | |
w.show() | |
w.raise_() | |
exit(a.exec_()) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
It will be nice to also display columns names and index names.