TypeError:“ DataFrame”对象不可调用((尝试在qWidget上可视化QTableView的模型时出现错误)

时间:2019-09-06 09:16:46

标签: python python-3.x pyside2

我正在尝试使用CSV文件中的所有信息在Qt窗口小部件上打印表格,但是在获取数据并使用类CustomTableModel为QTableView创建模型时出了点问题。

任何帮助将不胜感激!

CustomTableView类(根据QTpython准则为表视图创建自定义数据模型的代码)


# This Python file uses the following encoding: utf-8
from PySide2 import QtCore
from PySide2 import QtWidgets
from PySide2 import QtQuick
from PySide2.QtCore import Qt, QAbstractTableModel, QModelIndex
from PySide2.QtGui import QColor

class CustomTableModel(QAbstractTableModel):
    def __init__(self,data):
        QAbstractTableModel.__init__(self)
        self.data=data
        self.numRows=len(data)
        self.numCols=len(data.columns)

    def get_data(self):
        return self.data

    def rowCount(self, parent=QModelIndex()):
        return self.numRows

    def columnCount(self,parent=QModelIndex()):
        return self.numCols

    def HeaderData(self, section, orientation, role):
        if role!=Qt.DisplayRole:
            return None
        if orientation==Qt.Horizontal:
            return("Site","NitrogenDioxide")[section]
        else:
            return "{}.format(section)"




主要班级(代码最多)


import sys
from PySide2 import QtGui, QtCore ,QtWidgets
from PySide2.QtCharts import QtCharts
from PySide2.QtWidgets import QWidget, QApplication,QToolTip, QHBoxLayout, QVBoxLayout, QButtonGroup, QTableView
from PySide2.QtCore import Qt
import subprocess, pandas as pd
from CustomTableModel import CustomTableModel

class Example(QWidget):

    def __init__(self):
        super(Example, self).__init__()
        self.initUI()        

    def run(self, path):
        subprocess.call(['C:\\Program Files\\Tableau\\Tableau 2019.2\\bin\\tableau.exe',path])



    def initUI(self):

        #create the buttons 
        btn1 = QtWidgets.QPushButton('Start', self)
        btn1.resize(btn1.sizeHint())
        btn1.move(20, 20)
        btn1.clicked.connect(lambda:self.run('C:\\Users\\Friksos\\Documents\\Uni\\jobs\\intern19\\My Tableau Repository\\Dashboard prototype\\Prototype1.twb'))

        qbtn = QtWidgets.QPushButton('Quit', self)
        qbtn.clicked.connect(QtCore.QCoreApplication.instance().quit)
        qbtn.resize(qbtn.sizeHint())
        qbtn.move(150, 20)

        #create the button group (place it on the left of the window, and place buttons inside it vertically)
        self.vbox = QVBoxLayout()
        self.vbox.addWidget(btn1)
        self.vbox.addWidget(qbtn)
        self.vbox.addStretch(1)

        groupBox=QtWidgets.QGroupBox()
        groupBox.setLayout(self.vbox)

        #load data
        file=pd.read_csv('C:\\Users\\Friksos\\Documents\\Uni\\jobs\\intern19\\QT-for-Python\\Dashboard-prototype-practise\\Eastleigh-air-qual-data-head15.csv')
        file2 = file.iloc[:,[0,15]]
        file2.iloc[:,1] = pd.to_numeric(file2.iloc[:,1])         #encapsulate these 5 lines here in function later..
        normal=file2.iloc[:,1] > 0
        data=file2[normal]

        #create the chart

        self.model=CustomTableModel(data)
        self.table_view= QTableView()
        self.table_view.setModel(self.model)


        #lay out on widget   
        self.main_layout = QHBoxLayout()
        self.main_layout.addWidget(groupBox)
        self.main_layout.addWidget(self.table_view)
        self.setLayout(self.main_layout)

        self.setWindowTitle("Environmental-Transport Department KPIs")
        self.setGeometry(300, 300, 250, 150)
        QToolTip.setFont(QtGui.QFont('SansSerif', 10))
        self.setToolTip('This is a <b>QWidget</b> widget')
        self.show()



def main():

    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

预期结果类似于picture1,但是窗口左侧有2个按钮,而表格的右侧是所有信息

实际输出

终端消息:

TypeError:“ DataFrame”对象不可调用        ``上面印了很多遍

0 个答案:

没有答案