import sys

from PySide6.QtGui import QIcon
from PySide6.QtWidgets import QApplication, QPushButton, QVBoxLayout, QMenuBar, QMenu, QAction, \
    QMainWindow, QWidget


class Window(QMainWindow):
    """
    Classe définissant notre fenêtre principale.

    """

    def __init__(self, parent=None):
        """
        Initialiser chaque nouvelle instance de notre fenêtre.

        Args:
            parent: Widget qui va contenir notre boîte de dialogue.

        """
        super().__init__(parent=parent)
        self.setWindowTitle("Ma nouvelle fenêtre")
        # Create widgets
        self.icon = QIcon.fromTheme("scanner")
        self.basewidget = QWidget(self)
        self.edit = QLineEdit("Zone de texte")
        self.button = QPushButton("Appuyez ici !")
        self.menubar = QMenuBar(self)
        self.menu = QMenu(self.menubar, title="Élément de menu principal")
        self.menuentry = QAction(QIcon.fromTheme("network-wired"), "&Action")
        self.menu.addAction(self.menuentry)
        self.menubar.addAction(self.menu.menuAction())
        # Insérer un objet de mise en page dans notre fenêtre,
        # et y ajouter nos champ de texte et bouton
        self.setCentralWidget(self.basewidget)
        layout = QVBoxLayout(self)
        self.basewidget.setLayout(layout)
        self.setMenuBar(self.menubar)
        layout.addWidget(self.edit)
        layout.addWidget(self.button)
        self.setMinimumSize(640, 128)
        # Connecter le clic du bouton à la méthode "validate_button"
        self.button.clicked.connect(self.validate_button)

    def validate_button(self):
        """
        On définit cette méthode pour répondre au clic sur un bouton.

        Il faut que l'on configure notre bouton pour que lorsqu'on clique
        dessus, cette méthode soit exécutée.

        """
        print(f"Vous avez saisi {self.edit.text()}")


if __name__ == "__main__":
    # Créer une instance qui définit une application Qt
    # Via la variable "sys.argv", qui correspond aux arguments passés en ligne de commande
    # dans une liste de chaînes (ex. python programme.py arg1 arg2 arg3)
    # on peut configurer le comportement de notre application...
    # Également : notre application est un Singleton
    application = QApplication(sys.argv)
    # Ajouter notre boîte de dialogue
    window = Window()
    window.show()
    # Lancer la boucle Qt, qui ferme le programme quand on ferme toutes les fenêtres
    application.exec_()
    sys.exit()
