Pandas数据帧的自定义表视图模型

2024-09-25 00:33:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图实现一个模型,以便在通过QT设计器设计的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类中编写任何函数,该函数允许我编辑水平和垂直标题,以便显示dataframe索引(在行上)和dataframe列标签(在表的列上)。 有人能帮我吗? 谢谢


Tags: 数据模型importselfpandasindexreturndef
1条回答
网友
1楼 · 发布于 2024-09-25 00:33:48

我发现这个小部件产生了我希望的结果:

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])

还有其他更有效的想法吗?在

相关问题 更多 >