QWidget "disabled" aufrufendes Fenster (wie z.B MessageBox)

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Karsten Böhme
User
Beiträge: 86
Registriert: Sonntag 23. Dezember 2012, 07:54

Hallo zusammen,

ich erzeuge aus meiner Anwendung heraus ein Fenster (Widget) und zeige es über der Anwendung an. Über den unten stehenden Code bleibt dieses Fenster auch immer an der Oberfläche, die aufrufende Anwendung kann jedoch durch andere Anwendungen verdeckt werden.

Code: Alles auswählen

class XlsExpWindowClass(QWidget, Ui_xls_expt_wnd):

    def __init__(self, parent, net: str, tw: QTableWidget, dal: DataAccessLayerClass, cbx_view_index: int) -> None:
        super(XlsExpWindowClass, self).__init__(None, Qt.WindowStaysOnTopHint)
        self.mail_thread_finished: bool = True
        self.setupUi(self)
        .
        .
        .
Allerdings benötige ich ein Verhalten wie z.B. eine Messagebox, das heißt, das aufrufende Widget kann mit der Maus nicht mehr erreicht werden und es können da auch keine Bedienhandlungen vorgenommen werden. Kann mir hier jemand einen Tipp geben.

Vielen Dank !
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Was Du suchst ist ein modaler Dialog, also etwas, das von QDialog erbt und per exec aufgerufen wird.
Karsten Böhme
User
Beiträge: 86
Registriert: Sonntag 23. Dezember 2012, 07:54

Vielen Dank,

ich habe schon was gefunden. Habe im Designer windowModality = ApplicationModal gesetzt. Stand vorher auf WindowModal, hatte ich extra so eingestellt. Damit kann ich zumindest das aufrufende Fenster nicht mehr "bedienen" und es bleibt definitiv unter dem aufgerufenen Fenster. Wenn ich beide Fenster mit einer anderen Anwendung überdecke, lässt sich das aufgerufene Fenster über die Taskleiste allein an die Oberfläche holen. Damit kann ich leben. Hole ich das aufrufende Fenster über die Taskleiste an die Oberfläche, so erscheint in jedem Fall das aufgerufene Fenster mit.
Eines ist mir nicht klar, was ist der Unterschied zwischen ApplicationModal und WindowModal ?
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Hast du die Begriffe mal in der Qt Dokumentation nachgeschlagen? Da werden die doch gut erklärt.
Karsten Böhme
User
Beiträge: 86
Registriert: Sonntag 23. Dezember 2012, 07:54

Ja, habe es gefunden. WindowModal lässt Eingaben aus dem untergeordneten Fenster zu, ApplicationModal blockt alle Eingaben der zur App gehörenden Fenster.

Danke
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Jein. WindowModal unterbindet Eingaben aus den übergeordneten Fenstern, eine Hierarchie, die über der parent-Relation hergestellt wird. Du könntest also mehrere QWindow haben (zb pro Dokument das offen ist eines), die NICHT parent zueinander sind. Und dann einen modalen Dialog bauen, der pro dieser Hierarchie arbeitet.
Karsten Böhme
User
Beiträge: 86
Registriert: Sonntag 23. Dezember 2012, 07:54

@__deets__
Vielen Dank, das muss ich erst einmal verarbeiten...
Antworten