【问题标题】:custom tableView Model for Pandas DataFramePandas DataFrame 的自定义 tableView 模型
【发布时间】:2014-07-30 02:42:48
【问题描述】:

我正在尝试实现一个模型,以便在通过 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 类中成功编写任何允许我编辑水平和垂直标题以显示数据框索引(在行上)和数据框列标签(在表的列上)的函数。 有人可以帮我吗? 谢谢

【问题讨论】:

    标签: python qt uitableview model pandas


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-21
      • 2017-08-01
      • 1970-01-01
      • 2021-11-12
      • 1970-01-01
      • 2016-06-12
      • 2021-06-28
      相关资源
      最近更新 更多