Initial commit
This commit is contained in:
86
source/10-graphical-ui/gui/menucontrols.py
Normal file
86
source/10-graphical-ui/gui/menucontrols.py
Normal file
@ -0,0 +1,86 @@
|
||||
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_())
|
Reference in New Issue
Block a user