问题描述
我正在尝试从具有可扩展行的 Pandas 数据框创建一个表。
我查看了 Stack Overflow(请参阅下面的链接)、Qt 文档和使用 Python 和 Qt 进行的快速 GUI 编程,它们很有用,但已经过时 13 年了。我已经看到有人问过几个类似的问题(我还是个初学者,所以不太了解解决方案)
Display data from QAbstractTableModel in QTreeView
How can I make a table that can collapse its rows into categories in Qt?
这些似乎专注于使用 QAbstractTableModel 或将其转换为 QTreeView,因为它们具有相似的属性,都从 qabstractitemmodel 子类化(如果我理解正确的话)。我想知道为什么他们没有像 Rapid GUI Programming 书籍或下面的文章那样使用 TreeOfTableModel:
https://www.pythonstudio.us/pyqt-programming/representing-tabular-data-in-trees.html
这些模型中的哪一个最适合为我的表(见下面的代码)提供可扩展的行,如树视图,我应该采取哪些步骤来使其工作?
import sys
import os
from PyQt5 import QtCore,QtGui,QtWidgets
from PyQt5.QtCore import Qt,QRect
from PyQt5.QtWidgets import QApplication,QWidget,QTableWidgetItem,QMainWindow
import pandas as pd
global dict
dict = {"brand": ["Ford","BMW","Mercedes"],"model": ["Mustang","7 Series","A Class"],"year": [1964,2002,2020]}
global data
data = pd.DataFrame(dict,columns = ['brand','model','year'])
class TableModel(QtCore.QAbstractTableModel):
def __init__(self,data):
super(TableModel,self).__init__()
self._data = data
def data(self,index,role):
if role == Qt.displayRole:
value = self._data.iloc[index.row(),index.column()]
return str(value)
def rowCount(self,index):
return self._data.shape[0]
def columnCount(self,index):
return self._data.shape[1]
def headerData(self,section,orientation,role):
if role == Qt.displayRole:
if orientation == Qt.Horizontal:
return str(self._data.columns[section])
if orientation == Qt.Vertical:
return str(self._data.index[section])
class Ui(QtWidgets.QMainWindow):
def __init__(self):
super(Ui,self).__init__()
self.page = QWidget()
self.treeView = QtWidgets.QTreeView(self.page)
self.treeView.setGeometry(QRect(0,882,346))
self.model = TableModel(data)
self.treeView.setModel(self.model)
self.setCentralWidget(self.treeView)
app = QtWidgets.QApplication(sys.argv)
window = Ui()
window.show()
app.exec_()
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)