如何在 Treeview 中显示表格数据?

问题描述

我正在尝试从具有可扩展行的 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 (将#修改为@)