PyQt5-Tutorial - Menüleiste

  1. PyQt5 Menüleiste Einfaches Beispiel
  2. PyQt5-Menüpunkt-Symbole in der Menüleiste
  3. PyQt5 prüfbarer Menüpunkt in der Menüleiste

Eine Menüleiste befindet sich normalerweise in der linken oberen Ecke der GUI und unter der Titelleiste. Wenn der Benutzer auf den Eintrag im Menü klickt, kann er Aktionen wie das Öffnen von Dateien, das Speichern von Dateien oder das Beenden der Anwendung ausführen.

Wir werden lernen, wie man eine Menüleiste initiiert, die Aktion an das Menü bindet, die Verknüpfungen hinzufügt und den Statustext anzeigt.

PyQt5 Menüleiste Einfaches Beispiel

Wir werden unser erstes PyQt5-Menübar-Beispiel erstellen, das wie in den meisten Editoren das Menü File hat. Der Einfachheit halber fügen wir nur das Untermenü Exit ein.

PyQt5 Menubar_Basic.py
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-Menüleiste Basic

menubar = self.menuBar()

QMainWindow hat die Methode menuBar(), um die Menüleiste zu erstellen.

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

fileMenu wird der Menüleiste unter dem Namen File hinzugefügt und besteht aus einem Menüeintrag, der mit dem Objekt QAction assoziiert wird - exitAction.

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

Es erzeugt das Objekt QAction, um die Anwendung zu beenden, und speichert dieses Objekt in der Variablen exitAction.

Dieses QAction-Objekt hat den Namen &Exit und ist mit der Abkürzung CTRL+Q verknüpft.

exitAction.setStatusTip('Exit application')

Es zeigt die zusätzliche Meldung in der Statusleiste self.statusBar an, wenn der Benutzer mit dem Mauszeiger über diesen Menüeintrag fährt.

exitAction.triggered.connect(qApp.quit)

Wir verbinden das Ereignis, dass diese Exit-Aktion ausgelöst wird, mit dem Quit-Slot der Anwendung.

PyQt5-Menüpunkt-Symbole in der Menüleiste

Wir haben zwei Methoden, um das Symbol des Menüpunkts in der PyQt5-Menüleiste zu setzen.

Standard-Pixmap im PyQt5-Standardstil

Wir könnten das Menüpunktsymbol mit den Standardsymbolen einstellen, indem wir die Standard-Pixmap im Standardstil verwenden.

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

Der obige Code wählt das Standardsymbol für Dialogabbruch aus.

PyQt5 Menüleiste Pixmap QStyle-Symbol

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

Bilddatei mit QIcon verwenden

Neben der obigen Methode, die Standard-Icons von QStyle zu verwenden, könnten wir auch eine beliebige Bilddatei als Icon verwenden, indem wir die Klasse QIcon verwenden.

QIcon('exit.png')

Sie setzt die Bilddatei exit.png als Icon. Die Datei exit.png sollte sich im gleichen Ordner wie die Python-Skript-Datei befinden.

PyQt5 Menüleiste QIcon Icon

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 prüfbarer Menüpunkt in der Menüleiste

Ein überprüfbarer Menüpunkt kann aktiviert oder deaktiviert werden, und der Status wird jedes Mal umgeschaltet, wenn der Benutzer ihn anklickt.

Wir müssen das Schlüsselwortargument checkable auf True setzen, um den Menüpunkt prüfbar zu machen, wenn wir das Objekt QAction erstellen.

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 prüfbarer Menüleisteneintrag

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

Die Eigenschaft checkable sollte auf True gesetzt werden, um den Menüpunkt prüfbar zu machen, wenn wir das Objekt QAction initiieren.

Oder wir könnten die Methode setCheckable() verwenden, nachdem das Objekt erzeugt wurde.

self.setCheckable(True)
Anmerkung

Der Status des prüfbaren Elements ist der Parameter für die Callback-Funktion. Daher sollten wir ihn bei der Definition der Funktion im Argument auflisten. Wie,

def toggleLabel(self, state):

Der state ist ein boolescher Typ, mit dem Wert als True, wenn ausgewählt und als False, wenn nicht ausgewählt.