web-dev-qa-db-fra.com

Comment afficher une trame de données Pandas avec PyQt5 / PySide2

J'ai un problème avec la ligne ci-dessous self.tableView.set??????????(df) censée afficher le bloc de données dans PyQt5. Je mets ??? là où je manque le code dont j'ai besoin.

def btn_clk(self):
        path = self.lineEdit.text()
        df = pd.read_csv(path)
        self.tableView.set??????????(df)

Le reste du code fonctionne, car si j'utilise print(df) dans le code ci-dessus, le bloc de données est imprimé dans la console IPython. Donc, Pandas lit le CSV et l'imprime.

Mais, j'ai essayé beaucoup de choses pour l'afficher dans PyQt5 et rien ne fonctionne. Je ne connais pas très bien PyQt, j'ai juste commencé à jouer avec et je suis coincé ici.

Voici mon code:

from PyQt5 import QtCore, QtGui, QtWidgets
import pandas as pd
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(662, 512)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.centralwidget)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.verticalLayout = QtWidgets.QVBoxLayout()
        self.verticalLayout.setObjectName("verticalLayout")
        self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit.setObjectName("lineEdit")
        self.verticalLayout.addWidget(self.lineEdit)
        self.tableView = QtWidgets.QTableView(self.centralwidget)
        self.tableView.setObjectName("tableView")
        self.verticalLayout.addWidget(self.tableView)
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setObjectName("pushButton")
        self.verticalLayout.addWidget(self.pushButton)
        self.horizontalLayout.addLayout(self.verticalLayout)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 662, 21))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "PushButton"))


        self.pushButton.clicked.connect(self.btn_clk)

        MainWindow.show()

    def btn_clk(self):
        path = self.lineEdit.text()
        df = pd.read_csv(path)
        self.tableView.set????????????(df)


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())
14
Joe T. Boka

Pour corriger le tri ...

from natsort import natsorted, index_natsorted, order_by_index
def sort(self, column, order):
    self.layoutAboutToBeChanged.emit()
    if order == 0:
        self._df = self._df.reindex(index=order_by_index(self._df.index, index_natsorted(eval('self._df.%s' % (list(self._df.columns)[column])))))
    else:
        self._df = self._df.reindex(index=order_by_index(self._df.index, reversed(index_natsorted(eval('self._df.%s' % (list(self._df.columns)[column]))))))

    self._df.reset_index(inplace=True, drop=True)
    self.setDataFrame(self._df)
    self.layoutChanged.emit()
0
NL23codes