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.
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.
Abbildung: Hauptfenster