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 = 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`
-
程序中调用如下函数将任意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.