您当前的位置: 首页 >  Python

每日出拳老爷子

暂无认证

  • 6浏览

    0关注

    135博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

python中如何方便地加载dataframe数据到gui界面(pyqt)中

每日出拳老爷子 发布时间:2020-07-26 13:27:11 ,浏览量:6

背景需求

基本上Python中都是习惯用Dataframe处理数据,效率高,读写多样并且方便。但是拿到了正确的数据还需要展示到界面上,毕竟大多数应用都是需要交互界面的。那么如何方便地把df数据展示到gui界面呢?

解决方案
  1. 我这里用的是Pyqt做gui界面。Pyqt中Table类的组件有两个,一个tablewidget一个tableview,我这里推荐用Tableview,因为TableView有一个setModel的方法,可以直接将数据模型的数据整体展现出来,而不用自己去写一个一个Cell的数据加载逻辑。
  2. 直接使用下面这个类,这个类就是一个Model,通过构建这个类的实例,能够将一个简单Df的数据方便转换成TableView可以加载的Model对象。
class PdTable(QAbstractTableModel):
    def __init__(self, data, showAllColumn=False):
        QAbstractTableModel.__init__(self)
        self.showAllColumn = showAllColumn
        self._data = data

    def rowCount(self, parent=None):
        return self._data.shape[0]

    def columnCount(self, parent=None):
        return self._data.shape[1]

    def data(self, index, role=Qt.DisplayRole):
        if index.isValid():
            if role == Qt.DisplayRole:
                return str(self._data.iloc[index.row(), index.column()])
        return None

    def headerData(self,col,orientation,role):
        if orientation == Qt.Horizontal and role == Qt.DisplayRole:
            if type(self._data.columns[col]) == tuple:
                return self._data.columns[col][-1]
            else:
                return self._data.columns[col]
        elif orientation == Qt.Vertical and role == Qt.DisplayRole:
            return (self._data.axes[0][col])
        return None
  1. 在使用这个类的时候,就是简单地把df传给这个类的构造函数,实例化出来的Model再作为参数赋给tableview的setModel方法。
            search_result_model = PdTable(df_search)
            self.tableView_result.setModel(search_result_model)
  1. 真的是非常地方便,并且行列也都给你正确显示出来了。
美中不足
  1. 调查下来,似乎pyqt的tableview组件本身就存在一个显示,无法加载多列头的数据。所以目前遇到展示多列头的情况,我还是只好硬写TableWidget赋值逻辑来应对。大家如果有更好的方法,欢迎在留言区提醒。
关注
打赏
1657016083
查看更多评论
立即登录/注册

微信扫码登录

0.0384s