python - Fastest way to populate QTableView from Pandas data frame -


i'm new pyqt , struggling populate qtableview control.

my code following:

def data_frame_to_ui(self, data_frame):         """         displays pandas data frame gui         """         list_model = qtgui.qstandarditemmodel()         = 0         val in data_frame.columns:             # list model             if > 0:                 item = qtgui.qstandarditem(val)                 #item.setcheckable(true)                 item.seteditable(false)                 list_model.appendrow(item)             += 1         self.ui.profileslistview.setmodel(list_model)          # table model         table_model = qtgui.qstandarditemmodel()          # set table headers         table_model.setcolumncount(data_frame.columns.size)         table_model.sethorizontalheaderlabels(data_frame.columns.tolist())         self.ui.profiletableview.horizontalheader().setstretchlastsection(true)          # fill table model data         row_idx in range(10): #len(data_frame.values)             row = list()             col_idx in range(data_frame.columns.size):                 val = qtgui.qstandarditem(str(data_frame.values[row_idx][col_idx]))                 row.append(val)             table_model.appendrow(row)          # set table model table object         self.ui.profiletableview.setmodel(table_model) 

actually in code succeed populate qlistview, values set qtableview not displayed, can see truncated rows 10 because takes forever display hundreds of rows of data frame.

so, fastest way populate table model pandas data frame?

thanks in advance.

personally create own model class make handling easier.

for example:

import sys pyqt4 import qtcore, qtgui qt = qtcore.qt  class pandasmodel(qtcore.qabstracttablemodel):     def __init__(self, data, parent=none):         qtcore.qabstracttablemodel.__init__(self, parent)         self._data = data      def rowcount(self, parent=none):         return len(self._data.values)      def columncount(self, parent=none):         return self._data.columns.size      def data(self, index, role=qt.displayrole):         if index.isvalid():             if role == qt.displayrole:                 return qtcore.qvariant(str(                     self._data.values[index.row()][index.column()]))         return qtcore.qvariant()   if __name__ == '__main__':     application = qtgui.qapplication(sys.argv)     view = qtgui.qtableview()     model = pandasmodel(your_pandas_data)     view.setmodel(model)      view.show()     sys.exit(application.exec_()) 

Comments