Tutoriel PyQt5 - Barre de menu

Jinku Hu 15 février 2024
  1. PyQt5 Ménubar Exemple de base
  2. Icônes des éléments de menu de la barre de menu PyQt5
  3. PyQt5 Ménubar élément de menu vérifiable
Tutoriel PyQt5 - Barre de menu

Une barre de menu se trouve normalement dans le coin supérieur gauche de l’interface graphique et sous la barre de titre. Si l’utilisateur clique sur l’élément du menu, il peut prendre des actions comme ouvrir des fichiers, sauvegarder des fichiers ou quitter l’application.

Nous apprendrons comment lancer une barre de menu, lier l’action au menu, ajouter les raccourcis et afficher le texte d’état.

PyQt5 Ménubar Exemple de base

Nous allons créer notre premier exemple de menubar PyQt5 qui a un menu File comme dans la plupart des éditeurs. Nous incluons seulement le sous-menu Exit pour plus de simplicité.

import sys
from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication


class basicMenubar(QMainWindow):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.initUI()

    def initUI(self):

        self.setGeometry(200, 200, 200, 200)

        exitAction = QAction("&Exit", self)
        exitAction.setShortcut("Ctrl+Q")
        exitAction.setStatusTip("Exit application")
        exitAction.triggered.connect(qApp.quit)

        self.statusBar()

        menubar = self.menuBar()
        fileMenu = menubar.addMenu("&File")
        fileMenu.addAction(exitAction)

        self.setWindowTitle("PyQt5 Basic Menubar")
        self.show()


if __name__ == "__main__":

    app = QApplication(sys.argv)
    ex = basicMenubar()
    sys.exit(app.exec_())

PyQt5 Ménubar Basic

menubar = self.menuBar()

QMainWindow a la méthode menuBar() pour créer la barre de menu.

fileMenu = menubar.addMenu("&File")
fileMenu.addAction(exitAction)

fileMenu est ajouté à la barre de menu avec le nom File, et il consiste en une entrée de menu qui s’associe avec l’objet QAction - exitAction.

exitAction = QAction("&Exit", self)
exitAction.setShortcut("Ctrl+Q")
exitAction.setStatusTip("Exit application")
exitAction.triggered.connect(qApp.quit)

Il crée l’objet QAction pour quitter l’application et enregistre cet objet dans la variable exitAction.

Cet objet QAction a le nom de &Exit et est associé au raccourci CTRL+Q.

exitAction.setStatusTip("Exit application")

Il affiche le message supplémentaire dans la barre d’état self.statusBar lorsque l’utilisateur passe le pointeur de la souris sur cette entrée de menu.

exitAction.triggered.connect(qApp.quit)

Nous connectons l’événement que cette action de sortie est déclenchée au slot de sortie de l’application.

Icônes des éléments de menu de la barre de menu PyQt5

Nous avons deux méthodes pour régler l’icône de l’élément de menu dans la barre de menu de PyQt5.

Pixmap standard dans le style par défaut de PyQt5

Nous pourrions définir l’icône de l’élément de menu avec les icônes standard en utilisant la pixmap standard dans le style par défaut.

self.style().standardIcon(QStyle.SP_DialogCancelButton)

Le code ci-dessus sélectionne l’icône standard de l’annulation du dialogue.

PyQt5 Menubar Pixmap QStyle Icone

import sys
from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication, QStyle


class basicMenubar(QMainWindow):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.initUI()

    def initUI(self):

        self.setGeometry(200, 200, 200, 200)

        exitAction = QAction(
            self.style().standardIcon(QStyle.SP_DialogCancelButton), "&Exit", self
        )
        exitAction.setShortcut("Ctrl+Q")
        exitAction.setStatusTip("Exit application")
        exitAction.triggered.connect(qApp.quit)

        self.statusBar()

        menubar = self.menuBar()
        fileMenu = menubar.addMenu("&File")
        fileMenu.addAction(exitAction)

        self.setWindowTitle("PyQt5 Basic Menubar")
        self.show()


if __name__ == "__main__":

    app = QApplication(sys.argv)
    ex = basicMenubar()
    sys.exit(app.exec_())

Utilisez le fichier image avec QIcon

En plus de la méthode ci-dessus pour utiliser les icônes par défaut de QStyle, nous pourrions aussi utiliser n’importe quel fichier image comme icône en utilisant la classe QIcon.

QIcon("exit.png")

Elle définit le fichier image exit.png comme étant l’icône. Le fichier exit.png devrait être dans le même dossier que le fichier script python.

PyQt5 Ménubar Icône QIcon

import sys
from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication, QStyle
from PyQt5.QtGui import QIcon


class basicMenubar(QMainWindow):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.initUI()

    def initUI(self):

        self.setGeometry(200, 200, 200, 200)

        exitAction = QAction(QIcon("exit.png"), "&Exit", self)
        exitAction.setShortcut("Ctrl+Q")
        exitAction.setStatusTip("Exit application")
        exitAction.triggered.connect(qApp.quit)

        self.statusBar()

        menubar = self.menuBar()
        fileMenu = menubar.addMenu("&File")
        fileMenu.addAction(exitAction)

        self.setWindowTitle("PyQt5 Basic Menubar")
        self.show()


if __name__ == "__main__":

    app = QApplication(sys.argv)
    ex = basicMenubar()
    sys.exit(app.exec_())

PyQt5 Ménubar élément de menu vérifiable

L’élément de menu vérifiable peut être coché ou décoché et l’état est basculé à chaque fois que l’utilisateur clique dessus.

Nous devons définir le mot-clé argument checkable comme étant True pour rendre l’élément de menu vérifiable lorsque nous créons l’objet QAction.

import sys
from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication, QLabel
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import Qt


class basicMenubar(QMainWindow):
    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):

        self.setGeometry(200, 200, 200, 200)

        self.label = QLabel("The toggle state is ")
        self.label.setAlignment(Qt.AlignCenter)

        self.setCentralWidget(self.label)

        toggleAction = QAction("&Toggle Label", self, checkable=True)
        toggleAction.setStatusTip("Toggle the label")
        toggleAction.triggered.connect(self.toggleLabel)

        exitAction = QAction(QIcon("exit.png"), "&Exit", self)
        exitAction.setShortcut("Ctrl+Q")
        exitAction.setStatusTip("Exit application")
        exitAction.triggered.connect(qApp.quit)

        self.statusBar()

        menubar = self.menuBar()
        fileMenu = menubar.addMenu("&File")
        fileMenu.addAction(toggleAction)
        fileMenu.addAction(exitAction)

        self.setWindowTitle("PyQt5 Basic Menubar")
        self.show()

    def toggleLabel(self, state):
        self.label.setText("The toggle state is {}".format(state))


if __name__ == "__main__":

    app = QApplication(sys.argv)
    ex = basicMenubar()
    sys.exit(app.exec_())

PyQt5 Menubar Item Vérifiable

toggleAction = QAction("&Toggle Label", self, checkable=True)

La propriété checkable doit être définie à True pour rendre l’élément de menu vérifiable lorsque nous lançons l’objet QAction.

Ou nous pourrions utiliser la méthode setCheckable() après que l’objet soit créé.

self.setCheckable(True)
Note

L’état de l’élément vérifiable est le paramètre de la fonction de rappel. Par conséquent, nous devons le lister dans l’argument lors de la définition de la fonction. Comme

def toggleLabel(self, state):

Le state est un type booléen, avec la valeur True quand il est sélectionné et False quand il n’est pas sélectionné.

Auteur: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook