# Importer Qt
from PyQt5.QtWidgets import *

# Importer matplotlib et l'élément Canvas
import matplotlib.pyplot as plt
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas

# **************************
# Fenetre minimale
# **************************

# On crée l'application
app = QApplication([])
# Une fois l'application définie, on peut créer une nouvelle fenêtre
fenetre = QWidget()
# On affiche la fenêtre
fenetre.show()
# On lance l'application
app.exec_()

del fenetre
del app


# **************************
# Exemple basique (sans POO)
# **************************

# Création de l'application Qt et de la fenêtre à afficher
app = QApplication([])
fenetre = QWidget()
# On peut donner un nom à cette fenêtre
fenetre.setWindowTitle("Nouvelle fenêtre")


# Création des éléments graphiques

# Bouton
bouton = QPushButton('bouton', fenetre)

# Interaction du bouton lors d'un clic
def function_button():
    # quitte l'application
    app.quit()

bouton.clicked.connect(function_button)


# Texte (label)
label = QLabel("Label", fenetre)

# Changer le texte du label
label.setText("Label nouveau texte un peu long qui pourrait se découper sur plusieurs lignes")

# Définir une largeur fixe d'un élément graphique
label.setFixedWidth(100)

# Permettre au texte de se positionner sur plusieurs lignes
label.setWordWrap(True)


# Texte / Ligne éditable
ligne_editable = QLineEdit(fenetre)


# Graphique Matplotlib
fig = plt.figure()
plt.plot([0, 1, 2, 3], [10, 12, 9, 7], "-ko")
# On n'affiche pas la figure avec plt.show() mais on l'ajoute comme Canvas pour notre application
canvas = FigureCanvas(fig)


# Disposition / Layout

# On crée une nouvelle disposition sous forme de grille
disposition = QGridLayout()

# On ajoute chaque élément sur cette grille en indiquant:
# Position de début (ligne, colonne) en indice commençant à 0
# Taille de l'élément graphique (ligne, colonne)
disposition.addWidget(bouton, 0, 0, 1, 2)
disposition.addWidget(label, 1, 0, 1, 1)
disposition.addWidget(ligne_editable, 1, 1, 1, 1)
disposition.addWidget(canvas, 2, 0, 2, 2)

# On applique cette disposition à notre fenêtre
fenetre.setLayout(disposition)

# On affiche la fenêtre et lance l'application
fenetre.show()
app.exec_()
