In diesem Blogeintrag wollen wir die QMenubar
studieren. Viele Anwenderprogramme verwenden Menubars, um grundlegende Funktionalitäten zur Verfügung zu stellen.
MenuBar
Wir wollen eine Menuleiste erstellen, welche die Menüknöpfe File, Edit, View und Help zur Verfügung stellt. Grundsätzlich kann die Menuleiste durch die Pyside6 Klasse QMenubar
zur Verfügung gestellt werden. Jedoch ist das QMenubar
Widget schon in der Klasse QMainWindow
enthalten. Es reicht also der Aufruf er Methode menuBar()
.
import sys
from PySide6.QtCore import Qt
from PySide6.QtGui import QAction, QKeySequence
from PySide6.QtWidgets import QApplication, QMainWindow, QLabel
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setMinimumSize(500, 250)
self.setWindowTitle("Cybernetics")
# Main menu bar
self.menu = self.menuBar()
self.menu_file = self.menu.addMenu("&File")
exit = QAction("&Exit", self, triggered=QApplication.quit)
self.menu_file.addAction(exit)
self.menu_edit = self.menu.addMenu("&Edit")
undo = QAction("&undo", self, triggered=self.print_undo)
redo = QAction("&redo", self, triggered=self.print_redo)
self.menu_edit.addAction(undo)
self.menu_edit.addAction(redo)
self.menu_view = self.menu.addMenu("&View")
appearence = QAction("&Search", self, triggered=None)
self.menu_view.addAction(appearence)
self.menu_help = self.menu.addMenu("&Help")
about = QAction("&About Qt", self, shortcut = QKeySequence(QKeySequence.HelpContents), triggered=QApplication.aboutQt)
self.menu_help.addAction(about)
l1 = QLabel()
l1.setText("Hello Cybernetics!")
l1.setAlignment(Qt.AlignCenter)
self.setCentralWidget(l1)
def print_undo(self):
print(f"undo")
def print_redo(self):
print(f"redo")
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()
Das Ergebnis sieht dann wie folgt aus.
Das &
vor den Labelnamen &File, &Edit, &View, &Help
erlaubt ein Ansteuern der Menüknöpfe mit den Tastenkürzeln ALT+F, ALT+E, ALT+V, ALT+H.
Fazit
Die Verwendung des Widgets QMenuBar
stellt sich als sehr einfach heraus. Der schwierigere Teil ist das Verwenden des Konzepts Signal and Slots
, welches wir aber erst später betrachten werden.