Fehlermeldung bei Aufruf eines neuen Fenster /Modul

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Tiger
User
Beiträge: 21
Registriert: Sonntag 25. Dezember 2022, 20:03

Mit dem pgm „haupt“ erstelle ich ein Fenster mit einer Menu-Bar.

Code: Alles auswählen


import sys

from PySide6.QtCore import Qt
from PySide6.QtGui import QAction
from PySide6.QtWidgets import QMainWindow, QApplication, QLabel
from einstellungen import Frm_f1

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

        self.setWindowTitle("Fenster 1")

        label = QLabel("Achtung bei MacOS ist die Menu-Leiste ganz oben links")
        label.setAlignment(Qt.AlignCenter)
        self.setCentralWidget(label)

        button_action = QAction("Neues Fenster", self)
        button_action.triggered.connect(self.fensterNeu)

        menu = self.menuBar()

        file_menu = menu.addMenu("Einstellungen")
        file_menu.addAction(button_action)

        file_menu.addSeparator()




    def fensterNeu(self):
        print("Jetzt wir ein neues Fenster gestartet")
        Frm_f1.ab(self)



def main():
    app = QApplication(sys.argv)
    ex = MainWindow()
    ex.show()
    #print("Arguments1:", sys.argv)
    sys.exit(app.exec())


if __name__ == '__main__':
    main()



Wenn ich nun aus dem Pgm haupt „Einstellungen/ Neues Fenster“ auswähle, wird das Module "einstellungen" aufgerufen und es erscheint ein weiteres Fenster.
einstellungen

Code: Alles auswählen

import sys


from PySide6.QtCore import Qt
from PySide6.QtWidgets import QApplication, QMainWindow, QWidget, QLabel
from frm_f1 import Ui_frm_f1


class Frm_f1(QWidget,Ui_frm_f1):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

    def ab(self):
        #app = QApplication([])
        ex = Frm_f1()
        ex.show()
        sys.exit(app.exec())
So weit alles gut. Allerdings erhalte ich folgende Fehlermeldung:
NameError: name 'app' is not defined
Entferne ich den Kommentar bei #app = QApplication([]) erhalte ich folgende Fehlermeldung:
RuntimeError: Please destroy the QApplication singleton before creating a new QApplication instance.
Leider komme ich nicht weiter und beim Googeln bin ich nicht wirklich fündig geworden.- Kann mir jemand helfen?
__deets__
User
Beiträge: 14536
Registriert: Mittwoch 14. Oktober 2015, 14:29

“Pgm” ist eine komische Abkürzung für Programm. Warum kürzt du das ab, aber nicht jedes andere Wort?

Dein Problem ist einfach: ein Qt Programm kann nur eine App-Instanz haben, und nur einen exec Aufruf. Denn der startet den Mainloop, der alle Ereignisse verarbeitet.

Statt eines zweiten Fensters muss hier ein QDialog genutzt werden, und der hat auch eine exec-Methode, um eine modale Interaktion des Benutzers zu erzwingen, bis die Einstellungen getätigt sind.
Antworten