我是PyQt的新手,正在努力填充QTableView控件。
我的代码如下:
def data_frame_to_ui(self, data_frame): """ Displays a pandas data frame into the GUI """ list_model = QtGui.QStandardItemModel() i = 0 for val in data_frame.columns: # for the list model if i > 0: item = QtGui.QStandardItem(val) #item.setCheckable(True) item.setEditable(False) list_model.appendRow(item) i += 1 self.ui.profilesListView.setModel(list_model) # for the 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 for row_idx in range(10): #len(data_frame.values) row = list() for 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 to table object self.ui.profileTableView.setModel(table_model)
实际上,在代码中,我成功地填充了QListView,但是未显示我设置为QTableView的值,您还可以看到我将行截断为10,因为它永远需要显示数据帧的数百行。
那么,从熊猫数据框中填充表模型的最快方法是什么?
提前致谢。
就我个人而言,我将创建自己的模型类以使其处理起来更加容易。
例如:
import sys from 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_())