背景
PYQT做UI开发时,经常需要将各类Dataframe数据反应到前端UI,如果有一个通用的方法,无论想要显示的Dataframe具体的行列和值,都可以用相同函数反馈到前端会大大提高开发效率。
解决方案
-
QT端的组件选用TableView
-
后端代码中先造一个接受并分析所有Dataframe的通用类
-
`#用于直接显示Pandas表格的类
class PdTable(QAbstractTableModel):
def init(self, data, showAllColumn=False):
QAbstractTableModel.init(self)
self.showAllColumn = showAllColumn
self._data = datadef 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 Nonedef 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` -
程序中调用如下函数将任意df展示到TableView组件
-
def showTable(table_name,view_widget,showAllColumn=False): # 展示 model = PdTable(table_name,showAllColumn) curwidget = view_widget curwidget.setModel(model) curwidget.setAlternatingRowColors(True) curwidget.show()
-
其中,view_widget就是前端界面中用于展示任意DF的tableView.