PyQt5 Tutorial - MenuBar

Jinku Hu 15 febbraio 2024
  1. Esempio di base della barra dei menu PyQt5
  2. PyQt5 Menubar Voce di menu Icone
  3. PyQt5 Menubar Voce di menu controllabile
PyQt5 Tutorial - MenuBar

Una barra dei menu si trova normalmente nell’angolo in alto a sinistra della GUI e sotto la barra del titolo. Se l’utente fa clic sulla voce del menu, può intraprendere azioni come l’apertura di file, il salvataggio di file o l’uscita dall’applicazione.

Impareremo come avviare una barra di menu, legare l’azione al menu, aggiungere le scorciatoie e mostrare il testo di stato.

Esempio di base della barra dei menu PyQt5

Creeremo il nostro primo esempio di menubar PyQt5 che ha il menu File come nella maggior parte degli editor. Includiamo solo il sotto-menu Exit per semplicità.

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 Menubar Basic

menubar = self.menuBar()

QMainWindow ha il metodo menuBar() per creare la barra dei menu.

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

fileMenu viene aggiunto alla barra dei menu con il nome File, e consiste in una voce di menu che si associa all’oggetto QAction - exitAction.

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

Crea l’oggetto QAction per uscire dall’applicazione e salva questo oggetto nella variabile exitAction.

Questo oggetto QAction ha il nome &Exit ed è associato alla scorciatoia CTRL+Q.

exitAction.setStatusTip("Exit application")

Mostra il messaggio extra nella barra di stato self.statusBar quando l’utente passa il puntatore del mouse su questa voce di menu.

exitAction.triggered.connect(qApp.quit)

Colleghiamo l’evento che questa azione di uscita viene attivata allo slot di uscita dell’applicazione.

PyQt5 Menubar Voce di menu Icone

Abbiamo due metodi per impostare l’icona della voce di menu nella barra dei menu di PyQt5.

Pixmap standard nello stile predefinito di PyQt5

Potremmo impostare l’icona della voce di menu con le icone standard utilizzando la pixmap standard nello stile predefinito.

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

Il codice di cui sopra seleziona l’icona standard di cancellazione della finestra di dialogo.

Icona Pixmap QStyle PyQt5 Menubar Pixmap

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_())

Utilizzare il file immagine con QIcon

Oltre al metodo di cui sopra per usare le icone predefinite di QStyle, potremmo anche usare qualsiasi file immagine come icona usando la classe QIcon.

QIcon("exit.png")

Essa imposta il file immagine exit.png come icona. Il file exit.png dovrebbe essere nella stessa cartella del file script python.

Icona QIcon del menu PyQt5

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 Menubar Voce di menu controllabile

La voce di menu controllabile può essere controllata o deselezionata e lo stato viene commutato ogni volta che l’utente fa clic su di essa.

Dobbiamo impostare l’argomento della parola chiave checkable in modo che sia True per rendere la voce di menu controllabile quando creiamo l’oggetto 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 Voce di menu checkable

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

La proprietà checkable dovrebbe essere impostata su True per rendere la voce di menu controllabile quando iniziamo l’oggetto QAction.

Oppure potremmo usare il metodo setCheckable() dopo che l’oggetto è stato creato.

self.setCheckable(True)
Nota

Lo stato dell’elemento controllabile è il parametro della funzione di richiamo. Pertanto, dovremmo elencarlo nell’argomento quando si definisce la funzione. Come

def toggleLabel(self, state):

Lo state è di tipo booleano, con il valore come True quando è selezionato e False quando non è selezionato.

Autore: 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