Je voulais tracer un graphique dans une fenêtre PyQt5 mais il est complètement noir. J'ai suivi ce tutoriel et j'ai essayé de remplacer mon code par le static_canvas l'auteur a écrit, mais c'est toujours noir. Le code complet fonctionne bien, le problème se pose lorsque je ne garde qu'un seul graphe.

Mon code:

from PyQt5 import QtCore, QtGui, QtWidgets
from matplotlib.backends.backend_qt5agg import FigureCanvasQT
from matplotlib.figure import Figure
import matplotlib.pyplot as pyp


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.centralwidget)
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.horizontalLayout = QtWidgets.QHBoxLayout()
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.horizontalLayout_2.addLayout(self.horizontalLayout)
        MainWindow.setCentralWidget(self.centralwidget)

        self.canvas = FigureCanvasQT(Figure())
        self.horizontalLayout.addWidget(self.canvas)

        self.ax = self.canvas.figure.subplots()
        values = [i+1 for i in range(10)]
        axe = [i for i in range(10)]
        self.ax.plot(axe, values)
        # pyp.show() doesn't do anything


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

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


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_())

Indépendamment de ce que j'essaie de tracer, le résultat est la même fenêtre noire. Quelle est la solution?

De plus, comment dois-je procéder pour lier une fonction qui trace quelque chose au FigureCanvasQT ? Je souhaite intégrer une fonction d'un fichier différent à faire et afficher le tracé sans avoir à écrire autant de code dans le fichier de fenêtre.

0
Andrei Vicol 4 oct. 2020 à 10:41

1 réponse

Meilleure réponse

Dans le didacticiel qui lie FigureCanvasQT n'est pas utilisé mais FigureCanvas. Lors de l'analyse du code source, il est observé que FigureCanvasQT est FigureCanvas mais lors de l'exportation (voir ici) en tant que _Backend, plus de propriétés sont ajoutées. La solution est donc de changer pour :

from matplotlib.backends.backend_qt5agg import FigureCanvas

# ...
self.canvas = FigureCanvas(Figure())
# ...
1
eyllanesc 4 oct. 2020 à 08:37