87 lines
3.2 KiB
Python
87 lines
3.2 KiB
Python
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_())
|