Home  Contents

Menüs und Werkzeugleisten in PyQt4

Hauptfenster

Die QMainWindow-Klasse liefert das Hauptfenster der Anwendung und bietet uns das klassische Skelett mit einer Statusleiste, Werkzeugleisten und einer Menüleiste.

Statusleiste

Die Statusleiste ist ein Widget, das zur Darstellung von Statusinformationen verwendet wird.

#!/usr/bin/python

# statusbar.py 

import sys
from PyQt4 import QtGui

class MainWindow(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)

        self.resize(250, 150)
        self.setWindowTitle('statusbar')

        self.statusBar().showMessage('Ready')


app = QtGui.QApplication(sys.argv)
main = MainWindow()
main.show()
sys.exit(app.exec_())
 self.statusBar().showMessage('Ready')

Um die Statusleiste zu bekommen, rufen wir die statusBar()-Methode der QApplication auf. showMessage() zeigt Nachrichten auf der Statusbar an.

Menuleiste

Menüleisten sind mit der sichtbarste Teil grafischer Anwendungen. Dabei handelt es sich um eine Gruppe von Anweisungen, die in diversen Menüs zusammengefasst sind. Während man sich in Konsolenanwendungen all die arkanen Kommandos merken muss, finden wir in Menüs die meisten Anweisungen in logische Abschnitte gruppiert vor. Dabei gibt es anerkannte Standards, die den Aufwand, sich in eine neue Anwendung einzuarbeiten, reduzieren.

#!/usr/bin/python

# menubar.py 

import sys
from PyQt4 import QtGui, QtCore

class MainWindow(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)

        self.resize(250, 150)
        self.setWindowTitle('menubar')

        exit = QtGui.QAction(QtGui.QIcon('icons/exit.png'), 'Exit', self)
        exit.setShortcut('Ctrl+Q')
        exit.setStatusTip('Exit application')
        self.connect(exit, QtCore.SIGNAL('triggered()'), QtCore.SLOT('close()'))

        self.statusBar()

        menubar = self.menuBar()
        file = menubar.addMenu('&File')
        file.addAction(exit)

app = QtGui.QApplication(sys.argv)
main = MainWindow()
main.show()
sys.exit(app.exec_())
 menubar = self.menuBar()
 file = menubar.addMenu('&File')
 file.addAction(exit)

Als erstes erzeugen wir eine Menüleiste mittels der menuBar()-Methode der QMainWindow-Klasse. Dann fügen wir ein Menü mit Hilfe der AddMenu()-Methode hinzu. Schließlich bauen wir das Aktionsobjekt in das Datei-Menü ein.

Werkzeugleiste

Menüs gruppieren alle Kommandos, die man in einer Anwendung benutzen kann. Werkzeugleisten bieten Schnellzugriff auf die am häufigsten verwendeten Kommandos.


#!/usr/bin/python

# toolbar.py 

import sys
from PyQt4 import QtGui, QtCore

class MainWindow(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)

        self.resize(250, 150)
        self.setWindowTitle('toolbar')

        self.exit = QtGui.QAction(QtGui.QIcon('icons/exit.png'), 'Exit', self)
        self.exit.setShortcut('Ctrl+Q')
        self.connect(self.exit, QtCore.SIGNAL('triggered()'), QtCore.SLOT('close()'))

        self.toolbar = self.addToolBar('Exit')
        self.toolbar.addAction(self.exit)


app = QtGui.QApplication(sys.argv)
main = MainWindow()
main.show()
sys.exit(app.exec_())

 self.exit = QtGui.QAction(QtGui.QIcon('icons/exit.png'), 'Exit', self)
 self.exit.setShortcut('Ctrl+Q')

Grafische Anwendungen werden durch Anweisungen gesteuert. Diese Kommandos können über ein Menü, ein Kontextmenü, eine Werkzeugleiste, ein Icon oder eine Tastenkombination aufgerufen werden. PyQt vereinfacht die Entwicklung durch die Einführung von Aktionen. Ein action-Objekt kann Menütext, ein Icon, eine Tastenkombination, Statusinformationen, Hilfe-Text und einen Tooltip enthalten. In unserem Beispiel definieren wir ein action-Objekt mit einem Icon, einem Tooltip und einer Tastenkombination.

 self.connect(self.exit, QtCore.SIGNAL('triggered()'), QtCore.SLOT('close()'))

Hier verbinden wir das triggered()-Signal der Aktion mit dem vordefinierten close()-Signal.

 self.toolbar = self.addToolBar('Exit')
 self.toolbar.addAction(self.exit)

An dieser Stelle erzeugen wir eine Werkzeugleiste und verbinden ein action-Objekt damit.

Werkzeugleiste

Abbildung: Werkzeugleiste

Zusammenbauen

Im letzten Beispiel dieses Abschnitts erzeugen wir eine Menüleiste, eine Werkzeugleiste und eine Statusleiste. Zudem erzeugen wir ein zentrales Widget.

#!/usr/bin/python

# mainwindow.py 

import sys
from PyQt4 import QtGui, QtCore

class MainWindow(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)

        self.resize(350, 250)
        self.setWindowTitle('mainwindow')

        textEdit = QtGui.QTextEdit()
        self.setCentralWidget(textEdit)

        exit = QtGui.QAction(QtGui.QIcon('icons/exit.png'), 'Exit', self)
        exit.setShortcut('Ctrl+Q')
        exit.setStatusTip('Exit application')
        self.connect(exit, QtCore.SIGNAL('triggered()'), QtCore.SLOT('close()'))

        self.statusBar()

        menubar = self.menuBar()
        file = menubar.addMenu('&File')
        file.addAction(exit)

        toolbar = self.addToolBar('Exit')
        toolbar.addAction(exit)


app = QtGui.QApplication(sys.argv)
main = MainWindow()
main.show()
sys.exit(app.exec_())
 textEdit = QtGui.QTextEdit()
 self.setCentralWidget(textEdit)

Wir erzeugen ein Textbearbeitungs-Widget und machen es zum Hauptwidget des QMainWindow. Das zentrale Widget nimmt allen verfügbaren Raum ein.

Hauptfenster

Abbildung: Hauptfenster