Ich war nun dabei eine Menueleiste zu erstellen. Vorher hatte ich den Code in einer Datei, und nun wollte ich sehen, wie es mit dem Auslagern funktioniert. Das Auslagern klappt, die Menueleiste wird im MainWindow ordnungsgemäß angezeigt. Schauen wir mal in die Datei MDIFom.py. Mir geht es dabei besonders darum, ein triggered auszulösen. Allgemein klappt er auch, nur klappt er bei jedem Menupunkt, wo ich mich doch nur auf den Menupunkt "Beenden" konzentriere. Den Menupunkt "Beenden" habe ich der Klasse "MDIFormular" hinzugefügt (Zeile 37). In Zeile 39 wird "mnuMainWindowClose" als Parameter mittel der Methode "SetMenuBar" übergeben. Damit kennt die Klasse "MDIFormular" nun "mnuMainWindowClose". In Zeile 42 setze ich den "triggered" und übergebe im Parameter den Namen der Funktion "MnuCloseMain". Und in den Zeilen 44-66 habe ich dann die eben genannte Funktion definiert. Er soll beim Klick auf "mnuMainWindowClose" eine print-Anweisung ausgeben und das Programm anschließend beenden.
ABER, wie ihr in der Date Menue.py seht, habe ich mehrere Menupunkte (Filme, Bücher, Notizen etc...) und das Problem ist, die Funktion gibt sie an alle Menupunkte weiter, wo ich doch nur "Beenden" haben wollte. Bei allen Menupunkten wird das Programm beendet.
Was habe ich also übersehen?
MDIForm.py
Code: Alles auswählen
# -*- coding: cp1252 -*-
#import os
import sys # Wie alle Module muss auch das Modul sys mittels der import-Anweisung eingebunden werden,
# also import sys. Das sys-Modul stellt Informationen in Konstanten, Funktionen und
# Methoden über den Python-Interpreter zur Verfügung.
# Hier greift man auf bestimmte Elemente der grafischen Benutzeroberfläche zu, und nicht auf ALLE Elemente
from PyQt4.QtGui import QMainWindow, QApplication, QAction, QMenuBar
# HIer werden nur SIGNAL und SLOT aufgerufen.
from PyQt4.QtCore import SIGNAL, SLOT
from Menue import MenueLeiste
# Die Fensterklasse "MDIFormular" wird von QMainWindow abgeleitet, einer Klasse, die schon die
# wichtigsten Elemente eines Hauptfensters mitbringt.
class MDIFormular(QMainWindow):
# Vererbung aktivieren, angeben, dass es keine Elternform hat
def __init__ (self, parent=None):
QMainWindow.__init__(self, parent)
# Die MainWindow-Form bekommt hier einen Titel.
self.setWindowTitle(' Xarphus Build 0.1')
# Hier wird ein bestimmter Text über die Statusbar ausgegeben.
self.statusBar().showMessage('Ready')
self.MNUL_Verwaltung = MenueLeiste() # Hier wird der Klasse "MDIFormular" eine
# Instanz der Klasse "MenueLeiste" aus der Datei
# MenueLeiste.py hinzufuegt.
self.setMenuBar(self.MNUL_Verwaltung)# Anschließend wird durch die Methode "setMenuBar" der
# Klasse "MDIFormular"
# die Instanz self.mnuMenueleiste übergeben.
# Hier muss self.MNUL_Verwaltung als Parameter übergeben werden
# --> also self.setMenuBar(self.MNUL_Verwaltung)
self.MNUL_Info = MenueLeiste()
self.setMenuBar(self.MNUL_Info)
# Hier wir die Klasse "MenueLeiste" der Klasse "MDIFormular"
# hinzugefuegt.
self.mnuMainWindowClose = MenueLeiste()
# Hier wird durch die die Methode "setMenuBar" der Parameter übergeben.
self.setMenuBar(self.mnuMainWindowClose)
# Durch "MnuCloseMain" soll der Trigger mit der Funktion "MnuCloseMain" verdrahtet werden
self.mnuMainWindowClose.triggered.connect(self.MnuCloseMain)
def MnuCloseMain(self): # Eine Funktion definiert
print "Ihr Programm wurde soeben erfolgreich beendet."
self.close()
# Main Routine
if __name__ == "__main__":
print 'Dieses Programm läuft als Main.'
else:
print 'Das Programm wird von einem anderen Modul importiert.'
#MDIFormular
app = QApplication(sys.argv)
MDIWindow = MDIFormular()
MDIWindow.showMaximized()
# Startet die Anwendung und wartet, bis das Fenster geschlossen
sys.exit(app.exec_())
Hier habe ich eine Klasse für meinen Menu erstellt. Viele hätten gern eine Funktion daraus gemacht. Aber ich denke, es ist eher eine philosophische Frage.
Code: Alles auswählen
# -*- coding: cp1252 -*-
import sys # Wie alle Module muss auch das Modul sys mittels der import-Anweisung eingebunden werden,
# also import sys. Das sys-Modul stellt Informationen in Konstanten, Funktionen und
# Methoden über den Python-Interpreter zur Verfügung.
from PyQt4.QtGui import QAction, QMenuBar
from PyQt4.QtCore import SIGNAL, SLOT
class MenueLeiste(QMenuBar):
def __init__ (self, parent=None):
QMenuBar.__init__(self, parent)
########################################################
########### Menupunkte gehören zum Menu "Verwaltung" ###############
########################################################
# Menupunkt bekommt eine Beschriftung, hier 'Film'
mnuFilm = QAction ('Filme', self)
# Hier wird zu der Beschrifung hinzugefügt, über welche Tastenkombinationen
# man zum Film kommt.
mnuFilm.setShortcut('Ctrl+F')
# Sobald man mit der Maus über das Untermenu fährt, erscheint in der Statusbar
# der Text, hier 'Filme hinzufügen'.
mnuFilm.setStatusTip('Filme hinzufügen')
mnuBuch = QAction ('Bücher', self)
# Hier wird zu der Beschrifung hinzugefügt, über welche Tastenkombinationen
# man zum Film kommt.
mnuBuch.setShortcut('Ctrl+F')
# Sobald man mit der Maus über das Untermenu fährt, erscheint in der Statusbar
# der Text, hier 'Filme hinzufügen'.
mnuBuch.setStatusTip('Bücher hinzufügen')
mnuMusik = QAction ('Musik', self)
# Hier wird zu der Beschrifung hinzugefügt, über welche Tastenkombinationen
# man zum Film kommt.
mnuMusik.setShortcut('Ctrl+F')
# Sobald man mit der Maus über das Untermenu fährt, erscheint in der Statusbar
# der Text, hier 'Filme hinzufügen'.
mnuMusik.setStatusTip('Musik hinzufügen')
mnuAdressbuch = QAction ('Kontakte', self)
# Hier wird zu der Beschrifung hinzugefügt, über welche Tastenkombinationen
# man zum Film kommt.
mnuAdressbuch.setShortcut('Ctrl+F')
# Sobald man mit der Maus über das Untermenu fährt, erscheint in der Statusbar
# der Text, hier 'Filme hinzufügen'.
mnuAdressbuch.setStatusTip('Kontaktdaten hinzufügen')
mnuNotizen = QAction ('Notizen', self)
# Hier wird zu der Beschrifung hinzugefügt, über welche Tastenkombinationen
# man zum Film kommt.
mnuNotizen.setShortcut('Ctrl+F')
# Sobald man mit der Maus über das Untermenu fährt, erscheint in der Statusbar
# der Text, hier 'Filme hinzufügen'.
mnuNotizen.setStatusTip('Notizen hinzufügen')
mnuTrennstrich = QAction ('-', self) # Hier will der Trennstrich nicht funktionieren
# Menupunkt bekommt eine Beschriftung, hier 'Beenden'
mnuMainWindowClose = QAction ('Beenden', self)
# Hier wird zu der Beschrifung hinzugefügt, über welche Tastenkombinationen
# man dwn MainWindow beenden kann.
mnuMainWindowClose.setShortcut('Ctrl+Q')
# Sobald man mit der Maus über das Untermenu fährt, erscheint in der Statusbar
# der Text, hier 'Programm beenden'.
mnuMainWindowClose.setStatusTip('Programm beenden')
# Klickt man auf auf das Untermenu "MainWindowClose" wird ein bestimmtes Ereignis
# ausgelöst, hier wird der MainWindow geschlossen.
#self.connect(mnuMainWindowClose, SIGNAL('triggered()'), SLOT('close()'))
#self.mnuMainWindowClose.triggered.connect(close)
###############################################################
###### Menupunkte gehören zum Menu "Info" ################################
###############################################################
# Menupukt bekommt eine Beschriftung, hier 'Info'
mnuUeber = QAction ('Über Xarphus', self)
# Hier wird zu der Beschrifung hinzugefügt, über welche Tastenkombinationen
# man zum Film kommt.
mnuUeber.setShortcut('Ctrl+F')
# Sobald man mit der Maus über das Untermenu fährt, erscheint in der Statusbar
# der Text, hier 'Filme hinzufügen'.
#mnuUeber.setStatusTip('Alles über Xarphus')
# Statusbar wird erstellt.
#self.statusBar()
###################################################
###### Menuleiste "Verwaltung" #############################
###################################################
# Eine eigenständige Menubar wird erstellt. In diesem Fall nur einer, und zwar mit der
# Beschriftung "Verwaltung"
#menubar = QMenuBar()
MNUL_Verwaltung = self.addMenu('&Verwaltung')
# Zum Menü "Verwaltung" werden weitere Menüpunkte erstellt.
# MNUL steht hier für MenuLeiste
# MNUP steht hier für MenuPunkt
MNUL_Verwaltung.addAction(mnuFilm)
MNUL_Verwaltung.addAction(mnuBuch)
MNUL_Verwaltung.addAction(mnuMusik)
MNUL_Verwaltung.addAction(mnuAdressbuch)
MNUL_Verwaltung.addAction(mnuNotizen)
MNUL_Verwaltung.addAction(mnuTrennstrich)
MNUL_Verwaltung.addAction(mnuMainWindowClose)
#############################
###### Menuleiste "Info" ###########
#############################
# Eine eigenständige Menubar wird erstellt. In diesem Fall nur einer, und zwar mit der
# Beschriftung "Info"
# MNUL steht hier für MenuLeiste
# MNUP steht hier für MenuPunkt
#menubar = self.menuBar()
MNUL_Info = self.addMenu('&?')
# Zum Menü "Verwaltung" werden weitere Menüpunkte erstellt.
MNUL_Info.addAction(mnuUeber)