Pandas DataFrame自定义tableView模型
我正在尝试实现一个模型,以便在通过QT Designer设计的tableView对象中显示来自pandas数据框的数据。我在Stack Overflow上看到了一些示例,展示了如何为这个目的编写一个简单的模型:
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):
self.datatable = dataIn
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):
if role == QtCore.Qt.DisplayRole:
i = index.row()
j = index.column()
return '{0}'.format(self.datatable.iget_value(i, j))
else:
return QtCore.QVariant()
但是,我无法在TableModel类中编写任何函数,以便编辑水平和垂直标题,从而显示数据框的索引(在行上)和数据框的列标签(在表格的列上)。有没有人能帮我解决这个问题?谢谢!
1 个回答
0
我发现这个小工具能产生我想要的结果:
def headerData(self,section,orientation,role=Qt.DisplayRole):
if role != Qt.DisplayRole:
return QVariant()
if orientation == Qt.Horizontal:
return self.df.columns.tolist()[section]
elif orientation == Qt.Vertical:
return str(self.df.index.tolist()[section])
还有其他更有效的想法吗?