Les menus PyQt5 avec la classe QMenuBar

1. Introduction aux de menus avec PyQt5

  1. Les menus constituent une composante essentielle de l'interface graphique utilisateur d'une application, offrant aux utilisateurs un accès facile à différentes fonctionnalités et options.
  2. PyQt5 propose la classe QMenuBar pour la création de barres de menus dans une application PyQt5. Pour instancier une barre de menu, il est nécessaire d'instancier la classe QMenuBar et de l'ajouter à la fenêtre principale de l'application.
  3. Cette barre de menu peut contenir plusieurs menus, chacun comportant une liste d'actions. Les actions sont des fonctions déclenchées lorsque l'utilisateur sélectionne un élément du menu.
  4. Ce tutoriel explore la création et la personnalisation de barres de menus dans PyQt5, couvrant l'ajout de menus, d'actions et de sous-menus, ainsi que la connexion à des fonctions.
  5. Des sujets tels que l'utilisation de boîtes de dialogues pour l'ouverture et l'enregistrement de fichiers, la personnalisation des menus et des actions, l'utilisation de raccourcis clavier, la création de menus contextuels et l'utilisation de la barre d'outils seront également abordés.

2. Menu simple avec QMenuBar PyQt5

2.1 Création d'un menu avec la classe QMenuBar

La bibliothèque PyQt5 met à disposition une classe appelée QMenuBar pour la création de barres de menus. En instanciant la classe QMenuBar, un objet menuBar est créé, avec des méthodes telles que :

  1. addMenu(): Ajoute un menu tel que "File", "Edit", "Option"...
  2. addAction(): Ajoute des commandes aux éléments de menu comme "File->Open", "File->Save", "File->Save As", "File->Exit"...
  3. addSeparator(): Ajoute un séparateur entre les éléments du menu.

Pour ce faire, créez un fichier Python nommé "simplemenu.py" et insérez-y le code suivant :

Exmple (menu simple avecQMenuBar)

menu pyQt5 QMenuBar with QAction

2.2 Intégration d'une action dans le menu

Il est également possible d'ajouter une action de commande au menu PyQt, ce qui nous permettra d'attribuer des actions à des clics spécifiques. Par exemple, lorsque nous cliquons sur "Fichier -> Ouvrir", une nouvelle fenêtre peut apparaître, ou lorsque nous cliquons sur "Fichier -> Quitter", nous pouvons fermer la fenêtre. Pour cela, nous devons incorporer des fonctions qui exécutent ces actions :

Exemple (action: File-->Exit)




3. QMenuBar selon l'approche objet PyQt5

Pour structurer efficacement vos projets Python et prévenir la duplication du code, il est impératif d'adopter une approche orientée objet. À cet égard, il est recommandé de rédiger un code bien organisé en utilisant une classe Python:

Exemple complet (menu File -> Exit )

4. Ajouter une action à un élément de menu à l'aide de la classe QAction

Nous allons maintenant voir une autre méthode pour ajouter une action à un élément de menu en utilisant la classe QAction. À cette fin, les étapes suivantes doivent être suivies :

  1. Nous créons l'action : en utilisant la classe QAction
  2. Nous ajoutons l'action : au menu en utilisant la méthode addAction()
  3. Nous connectons l'action : à la méthode qui exécute l'action à l'aide de la méthode trigger.connect()

5. Raccourcis clavier

Pour améliorer l'ergonomie de notre application, nous pouvons mettre en place des raccourcis clavier. Dans cette section, nous aborderons la création d'un raccourci clavier, notamment Ctrl+Q, pour exécuter l'action "Quitter". Pour ce faire, nous devons appliquer la méthode setShortcut() à l'objet exitAction :

En exécutant le code ci-dessus vous obtenez la fenêtre suivante avec un menu File ayant une action Exit doté d'un raccourcis clavier: "Ctrl+Q" en l'appliquant vous quittez la fenêtre:

QMenuBar exit action shortcute Ctrl+Q

6. Liste des méthodes associées à la classe QMenuBar

La classe QMenuBar de PyQt5 offre plusieurs méthodes pour gérer et personnaliser les barres de menus. Ces méthodes vous permettent de manipuler la structure et le comportement de la barre de menus dans votre application PyQt5. Vous pouvez les utiliser pour ajouter des menus, des séparateurs, personnaliser l'apparence et bien plus encore. Pour plus de détails, vous pouvez vous référer à la documentation officielle de PyQt5: https://www.riverbankcomputing.com/static/Docs/PyQt5/

Voici quelques-unes des méthodes associées à la classe QMenuBar :

  1. addMenu(title: str) -> QMenu : Ajoute un nouveau menu à la barre de menus avec le titre spécifié et renvoie l'objet QMenu correspondant.
  2. addSeparator() : Ajoute un séparateur à la barre de menus. Les séparateurs sont utilisés pour diviser visuellement les groupes d'éléments de menu.
  3. clear() : Efface tous les menus de la barre de menus.
  4. insertMenu(before: QMenu, menu: QMenu) : Insère un nouveau menu avant un menu existant spécifié dans la barre de menus.
  5. setCornerWidget(widget: QWidget) : Définit un widget dans le coin de la barre de menus. Cela peut être utilisé pour ajouter des widgets personnalisés tels que des boutons.
  6. setNativeMenuBar(useNativeMenuBar: bool) : Active ou désactive l'utilisation de la barre de menus native du système d'exploitation. Cette méthode est utile sur macOS pour activer ou désactiver la barre de menus native.
  7. setVisible(visible: bool) : Définit la visibilité de la barre de menus. Si visible est True, la barre de menus est affichée ; sinon, elle est masquée.
  8. cornerWidget() -> QWidget : Renvoie le widget défini dans le coin de la barre de menus à l'aide de setCornerWidget().

7. Quiz

Exercice 1
Quel est le rôle de la classe QMenuBar dans PyQt5 ?

a) Gérer les barres d'outils dans une interface PyQt5.
b) Gérer les menus dans une interface PyQt5.
c) Gérer les fenêtres dans une interface PyQt5.

Exercice 2
Quelle méthode est utilisée pour ajouter un menu à une instance de QMenuBar ?

a) addMenu()
b) insertMenu()
c) setMenu()

Exercice 3
Comment peut-on ajouter un élément de menu à un menu existant dans QMenuBar ?

a) addMenuItem()
b) addItem()
c) addAction()

Exercice 4
Quelle méthode est utilisée pour créer un menu contextuel dans PyQt5 ?

a) createContextMenu()
b) createMenu()
c) setContextMenu()

Exercice 5
Comment peut-on connecter un signal à une action de menu dans PyQt5 ?

a) connectAction()
b) triggered.connect()
c) linkAction()

Exercice 6
Quel attribut peut être utilisé pour définir un raccourci clavier pour une action de menu ?

a) shortcut
b) key
c) accelerator

Exercice 7
Quelle méthode est utilisée pour désactiver une action de menu dans QMenuBar ?

a) disableAction()
b) setEnabled()
c) deactivateAction()

Exercice 8
Comment peut-on créer une barre de menu pour une fenêtre principale dans PyQt5 ?

a) En utilisant QMenu
b) En utilisant QMenuBar
c) En utilisant QToolbar

Exercice 9
Quel est l'avantage d'utiliser QMenuBar par rapport à QMenu seul pour la création de barres de menu ?

a) QMenuBar permet d'ajouter des icônes aux menus.
b) QMenuBar permet de gérer plusieurs menus de manière hiérarchique.
c) QMenuBar est plus léger en termes de ressources.

Exercice 10
Comment peut-on obtenir la liste des actions d'un menu dans QMenuBar ?

a) menuActions()
b) actions()
c) getActions()

  1. Rép Exercice 1: b) Gérer les menus dans une interface PyQt5.
  2. Rép Exercice 2: a) addMenu()
  3. Rép Exercice 3: c) addAction()
  4. Rép Exercice 4: b) createMenu()
  5. Rép Exercice 5: b) triggered.connect()
  6. Rép Exercice 6: a) shortcut
  7. Rép Exercice 7: b) setEnabled(False)
  8. Rép Exercice 8: b) En utilisant QMenuBar
  9. Rép Exercice 9: b) QMenuBar permet de gérer plusieurs menus de manière hiérarchique.
  10. Rép Exercice10: b) actions()




 

Younes Derfoufi
CRMEF OUJDA

Leave a Reply