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 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
|
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Tue Apr 24 20:00:02 2018
@author: saltz
"""
import math
import sys
from PyQt5 import QtGui, QtCore
from PyQt5.QtWidgets import QDialog, QApplication, QPushButton, QVBoxLayout ,QHBoxLayout ,QMessageBox
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar
import matplotlib.pyplot as plt
import numpy as np
import random
from Fig9_21_dynamic_position_size import * #charge le fichier Fig9_21_dynamic_position_size.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):
#main = Window() # appelles la class nommée windows ci dessous , cela marche aussi avec une fonction def nomdunefonction
self.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
self.setWindowTitle("Incorporer matplotlib dans une fenetre faite avec Qt5 , c'est FUN !!") # met un titre à la fenetre
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() # creer un layout Horizontal
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
# self.show()
# **********************************************************************
def boutonpositionsize(self):
#Fig9_21_dynamic_position_size.positionsize #appelle la fonction positionsize située dans le fichier Fig9_21_dynamic_position_size.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):
msg = QMessageBox()
msg.setIcon(QMessageBox.Information)
msg.setText("This is a message box")
msg.setInformativeText("This is additional information")
msg.setWindowTitle("MessageBox demo")
msg.setDetailedText("The details are as follows:")
msg.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)
msg.exec_() # c'est .exec_() qui fait s'afficher la message box à l'écran
# self.y = sin(self.x)
# self.line.set_ydata(self.y)
# self.canvas1.draw()
def plotcos(self):
x = np.linspace(0, 2*np.pi, 30)
y = np.cos(x)
axcos = self.figure.add_subplot(111) # create an axis
axcos.plot(x, y)
self.canvas2.draw() # refresh canvas
axcos.set_title('Cosinus')
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