Hallo blackjack,
vielen Dank für die Info, aber ohne funktioniert es auch nicht .... und weiteres auch nicht. Ich habe wohl grundsätzlich etwas nicht verstanden. Hier mal mein Code:
Code: Alles auswählen
from PyQt6.QtWidgets import QApplication, QMainWindow, QMdiArea, QMdiSubWindow, QMessageBox
# Beginn Variablen -------------------------------------------------------------------------------------------
# error_msg_ini = False
# Ende Variablen ----------------------------------------------------------------------------------------------
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.mdi = QMdiArea()
self.setCentralWidget(self.mdi)
# MainFenster Einstellungen
self.setWindowTitle("Anne's kleines BueroTool")
# *** MENU-BAR ***
menuBar = self.menuBar()
# MenuBar Eintraege
# * DATEI *
menuDatei = menuBar.addMenu("&Datei")
# Drucken
menuDateiDrucken = menuDatei.addAction("Drucken")
menuDateiDrucken.setEnabled(False)
# Seperator
menuDatei.addSeparator()
# Ende
menuDateiEnde = menuDatei.addAction("Ende")
menuDateiEnde.setShortcut("Ctrl+Q")
menuDateiEnde.setStatusTip("Programm beenden")
menuDateiEnde.triggered.connect(self.close)
# KONTAKTE
menuKontakte = menuBar.addAction("&Kontakte")
menuKontakte.triggered.connect(lambda: self.StartSubWindow("K"))
# OBJEKTE
menuObjekte = menuBar.addAction("&Objekte")
menuObjekte.triggered.connect(lambda: self.StartSubWindow("O"))
# DB
menuDB = menuBar.addMenu("&db")
menuDB.setEnabled(False)
# HILFE
menuHilfe = menuBar.addMenu("&Hilfe")
menuHilfeInfo = menuHilfe.addAction("Info")
menuHilfeInfo.setShortcut("Ctrl+A")
menuHilfeInfo.setStatusTip("Information für Anne")
menuHilfeInfo.triggered.connect(ShowMsgBox)
# *** STATUS-BAR ***
statusBar = self.statusBar()
def StartSubWindow(self, t):
if t == "K":
startSubWindowKontakte = QMdiSubWindow()
self.mdi.addSubWindow(startSubWindowKontakte)
startSubWindowKontakte.setWindowTitle("Kontakte")
## mdi.menuKontakte.setEnabled(False)
startSubWindowKontakte.show()
if t == "O":
startSubWindowObjekte = QMdiSubWindow()
self.mdi.addSubWindow(startSubWindowObjekte)
startSubWindowObjekte.setWindowTitle("Objekte")
startSubWindowObjekte.show()
if t == "E":
startSubWindowEinstellungen = QMdiSubWindow()
self.mdi.addSubWindow(startSubWindowEinstellungen)
startSubWindowEinstellungen.setWindowTitle("Einstellungen")
startSubWindowEinstellungen.show()
def ShowMsgBox():
msgBox = QMessageBox()
msgBox.setWindowTitle("Information")
msgBox.exec()
# ... zum testen:
# winsound.PlaySound("SystemExclamation", winsound.SND_ALIAS)
app = QApplication([])
mdi = MainWindow()
mdi.show()
app.exec()
Mein Problem ist, dass meine Funktion in einer anderen Funktion "nicht erkannt" wird.
Unter "'# HILFE" ist der Eintrag "menuHilfeInfo.triggered.connect(ShowMsgBox)". Hier erhalte ich die Fehlermeldung "unhandle NameError "name 'ShowMsgBox' is not defined". Ich habe aber mit def eine Funktion ShowMsgBox definiert. Warum wird diese nicht gefunden?
Auch unter # KONTAKTE habe ich dies "menuKontakte.triggered.connect(lambda: self.StartSubWindow("K"))" nur zum laufen gebracht, da ich "lamda" verwendet habe. Aber eigentlich müsste die Funktion "StartSubWindow" doch bekannt sein.
Der Code öffnet ein Fenster und ich kann weitere Fenster darin öffnen. Dies funktioniert auch. Die Fenster erhalten die Überschrift "Kontakte" oder "Objekte". Ich möchte, dass jedoch auf eine Fenster pro Überschrift beschränken. EIne einfache Möglichkeit wäre, den MenüPunkt zu deaktivieren, wenn ein Fenster bereits geöffnet ist. Diese wollte ich mit "mdi.menuKontakte.setEnabled(False)" (siehe f "StartSubWindow"). Auch hier wird gemeckert, dass die Funktion nicht bekannt ist.
Als 3 Probleme, eigentlich immer mit dem gleichen Tenor: die Funktion wird nicht gefunden! Was habe ich nicht begriffen?