import sys from PySide2.QtGui import QIcon from PySide2.QtWidgets import QApplication, QLineEdit, QPushButton, QVBoxLayout, QAction, \ QMainWindow, QWidget class Dialog(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) # Changer le titre de la fenêtre et changer la position et taille self.setWindowTitle("Ma nouvelle fenêtre") self.setGeometry(50, 50, 640, 480) # Définir l'icône pour la fenêtre self.setWindowIcon(QIcon.fromTheme("exit")) # On crée manuellement des contrôles dans notre fenêtre et des menus self.edit = QLineEdit("Zone de texte") self.button = QPushButton("Appuyez ici !") self.menuentry1 = QAction(QIcon.fromTheme("exit"), "&Fin") self.menuentry2 = QAction(QIcon.fromTheme("sleep"), "&Dodo") self.filemenu = self.menuBar().addMenu("&File") self.filemenu.addAction(self.menuentry1) self.filemenu.addSeparator() self.filemenu.addAction(self.menuentry2) # Insérer un objet de mise en page dans notre fenêtre, # et y ajouter nos champ de texte et bouton frame = QWidget() layout = QVBoxLayout() layout.addWidget(self.edit) layout.addWidget(self.button) # Ajouter la mise en page au widget frame.setLayout(layout) # Définir le widget comme le contenu de la fenêtre self.setCentralWidget(frame) # Connecter le clic du bouton à la méthode "validate_button" self.button.clicked.connect(self.button_clicked) # Connecter la validation du menu1 à la même méthode self.menuentry1.triggered.connect(self.button_clicked) # Connecter la modification du champ de texte à une méthode self.edit.textEdited.connect(self.text_modified) def button_clicked(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()}") def text_modified(self): """ On définit cette méthode pour répondre à la modification du champ texte. Cette méthode n'est pas spécifique à Qt, c'est juste qu'on peut lier des événements de contrôles Qt à des fonctions arbitraires. Et on va lier l'édition du champ de texte à cette méthode-ci. """ print(f"{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 en ligne de commande # on peut configurer le comportement de notre application... # Également : notre application est un Singleton application = QApplication(sys.argv) # Ajouter notre boîte de dialogue dialog = Dialog() dialog.show() # Lancer la boucle Qt, qui ferme le programme quand on ferme toutes les fenêtres sys.exit(application.exec_())