Bonjour ,

J'aie 3 canevas avec 4 boutons dans une fenêtre faite avec Qt5 . Je ne reussis pas à afficher les courbes des fonctions nommées "plotsin" et "plotcos" dans les canevas respectif .C'est tout ...Voici le code .(Je développe en tant qu'amateur occasionnel)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Wed May  9 12:20:55 2018
 
@author: saltz
"""
 
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Tue Apr 24 20:00:02 2018
 
@author: saltz
"""
import math
from pylab import *
import sys
from PyQt5 import QtGui, QtCore
from PyQt5.QtWidgets import QDialog, QApplication, QPushButton, QVBoxLayout ,QHBoxLayout
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar
import matplotlib.pyplot as plt
import random
 
from test import *   #charge le fichier test.py
 
 
class Window(QDialog):
 
    def __init__(self, parent=None):  # _init__ est un constructeur intervient sur l'objet au moment de le créer et de le supprimer
 
        super(Window, self).__init__(parent)
        self.setUI()
 
 
        # ETAPE , ETAPE 2 et ETAPE3 marchent ensemble
    def setUI(self): 
 
        self.figure = plt.figure() # a figure instance to plot on
        self.axes = self.figure.add_subplot(111)  # mets des axes x et y sur les 3 canvas d'un coup
        self.canvas = FigureCanvas(self.figure)
 
 
        self.canvas1 = FigureCanvas(self.figure)
        self.canvas2 = FigureCanvas(self.figure)
 
        self.toolbar = NavigationToolbar(self.canvas, self) # this is the Navigation widget it takes the Canvas widget and a parent
        self.toolbar1 = NavigationToolbar(self.canvas1, self)
        self.toolbar2 = NavigationToolbar(self.canvas2, self)
 
        # ETAPE 1 on creer un bouton et l'évènement qui lui associé avec connect
 
 
        button = QPushButton('Plot',self)  # regle le texte du bouton seulement et self indique le parent sur lequel doit apparaitre le bouton
        button.clicked.connect(self.plot) # appelle l'évènement click et lancer la fonction plot
 
        button1 = QPushButton('détermines la taille')  #creer le bouton nommé "détermines la taille de la position"
        button1.clicked.connect(self.boutonpositionsize)
 
        button2 = QPushButton('Graph de sin',self)
        button2.clicked.connect(self.plotsin)
 
        button3 = QPushButton("Graph de cos",self)
        button3.clicked.connect(self.plotcos)
 
 
 
        # ETAPE 2 on affiche les widgets sur un layout
        layoutH=QHBoxLayout()
        layoutV = QVBoxLayout() # set the layout  creer un calque et sur le calque on mettra des boutons rmq c'est un layout VERTICAL ici
        layoutV.addWidget(self.toolbar)  # c'est seulement ici que la barre d'outils est crée
        layoutV.addWidget(self.canvas)  # .addWidget ajoute un widget dans un layout 
 
        layoutV.addWidget(self.toolbar1) # toolbar1 avant canvas1 donc à l'écran toolbar1 et au dessus de canvas1 .C'est cette ligne qui implante la toolbar à un endroit choisi de la fenetre
        layoutV.addWidget(self.canvas1) # ne pas confondre avec .addLayout qui ajoute un layout dans un autre layout permettant ainsi de les combiner
 
        layoutV.addWidget(self.toolbar2)
        layoutV.addWidget(self.canvas2)
 
        layoutH.addWidget(button) # c'est seulement ici que le bouton apparaitra à l'écran
        layoutH.addWidget(button1) # c'est seulement ici que le bouton1 apparaitra à l'écran
        layoutH.addWidget(button2)# c'est seulement ici que le pushButton_2 apparaitra à l'écran
        layoutH.addWidget(button3)
 
        layoutV.addLayout(layoutH)
 
        # ETAPE 3/ On dit à la fenêtre d'utiliser le layout qu'on a créé
        self.setLayout(layoutV)  #avantages permet aux boutons et Canvas de suivre la grandeur de la fenetre
 
    def boutonpositionsize(self):
 
        #test.positionsize  #appelle la fonction positionsize située dans le fichier test.py
        positionsize()
 
    def plot(self):
 
        # random data
        data = [random.random() for i in range(10)]  # ceci est une façon originale de créer une liste rapidement
        self.figure.clear()
        ax = self.figure.add_subplot(111) # create an axis
        ax.plot(data, '*-') # plot data
        self.canvas.draw() # refresh canvas
        ax.set_title('Données aléatoires')
 
    def plotsin():
 
        self.y = sin(self.x)
        self.line.set_ydata(self.y)
        self.canvas1.draw()
 
    def plotcos(self):
 
        self.y = cos(self.x)
        self.line.set_ydata(self.y )
        self.canvas2.draw()
 
if __name__ == '__main__':   # encapsule main avec une structure conditionnel afin de séparer le code d'un éventuel import 
 
    app = QApplication(sys.argv)
    main = Window()  # appelles la class nommée windows ci dessous , cela marche aussi avec une fonction def nomdunefonction
    main.setGeometry(0, 0, 600, 600 ) # 0,0 sert à caler la fenetre à l'écran sachant que 0 ,0 designer un point en haut à gauche de l'écran
                                      # met les dimensions de la fenetre par défaut ici 600*600
    main.setWindowTitle("Incorporer matplotlib dans une fenetre faite avec Qt5 , c'est FUN  !!") # met un titre à la fenetre
 
    main.show()
 
    sys.exit(app.exec_())