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