Widget auf dem Desktop übel ALLEN anderen Anwendungen anzeigen

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 versuche aus meiner Anwendung heraus eine Widget auf dem Desktop anzuzeigen, auch wenn sich meine Anwendung gerade im Hintergrund befindet.

Mit

Code: Alles auswählen

wnd.setWindowFlags(wnd.windowFlags() | Qt.WindowStaysOnTopHint)
erreiche ich das leider nicht.

Habe schon kräftig gegoogled, war jedoch bis jetzt nicht fündig.

Kann mir da jemand weiterhelfen ?

Danke!

Viele Grüße
Benutzeravatar
sparrow
User
Beiträge: 4193
Registriert: Freitag 17. April 2009, 10:28

Die Entscheidung, welches Fenster wie und in welchem Layer angezeigt wird, trifft der Window-Manager. Nicht deine Anwendung.
Das ist auch gut so, denn als Benutzer möchte ich nicht, dass Anwendungen das können.

Über welchen Window-Manager bzw. über welches Betriebssystem sprechen wir?
Karsten Böhme
User
Beiträge: 86
Registriert: Sonntag 23. Dezember 2012, 07:54

Wir sprechen über Windows 11.

Es muss allerdings möglich sein, denn es gibt immer wieder Anwendungen, welche ein Fenster als Hinweis über allem anzeigen können. Das ist auch gut so, schließlich gibt es Infos, welche angezeigt werden müssen, obwohl die auslösende Anwendung gerade von einer anderen Anwendung verdeckt werden kann (eben wie in meinem Fall) !
Benutzeravatar
sparrow
User
Beiträge: 4193
Registriert: Freitag 17. April 2009, 10:28

Die Meinung, dass das gut ist, teile ich nicht.
Mein letzter Kentnissstand ist, dass Microsoft es explizit erschwert genau das Verhalten auszulösen. Wird ein Fenster aktiviert, das nicht zu dem Prozes gehört, in dem der Benutzer gerade arbeitet, wird das durch in der Taskleiste dadurch angezeigt, das das Fenster als "hier passiert etwas" markiert wird.
_Das_ ist gut so. Denn es wäre eine gar grausige Welt, in der es möglich wäre jede Sekunde ein anderes Fenster aktiv zu schalten, während ich in einem ganz anderen Programm arbeite.

Du kannst noch versuchen das Fenster mit "activateWindow" oder "show" nach vorne zu holen - je nachdem welchen Zustand sie vorher hatten.

Ich würde aber empfehlen den Weg über die OS-Notifcations zu nehmen.
Karsten Böhme
User
Beiträge: 86
Registriert: Sonntag 23. Dezember 2012, 07:54

Okay, ich werde mir mal alle Vorschläge anschauen.

Zum Verständnis, es handelt sich um 'eine Art' Messagebox, die von meiner Anwendung über wnd.exec() aufgerufen wird. Die Taskleiste ist mir allerdings zu wenig. Der das System nutzende Kollege soll SOFORT informiert werden. Es ist nun mal so.
Benutzeravatar
sparrow
User
Beiträge: 4193
Registriert: Freitag 17. April 2009, 10:28

Du musst dich nicht rechtfertigen.
Am Ende entscheidet es hoffentlich der Fenstermanager, der das Verhalten unterbindet.
Ich stelle mir gerade vor, wir der Kollege intensiv an etwas arbeitet und dann das nervige "pling pling" des Fehlersounds, weil dort, wo er tippen will, gar keine Eingabe erwartet wird, sondern ein Message-Fenster aufgetaucht ist.
Oder noch besser. Wie er ein Passwort eingeben will und das dann in der anderen Anwendung landet.
Deshalb möchte _ich_ solche Anwendungen sicher nicht haben.
Karsten Böhme
User
Beiträge: 86
Registriert: Sonntag 23. Dezember 2012, 07:54

Es handelt sich um eine Leitstelle. Da gibt es Prioritäten. Du sollst so eine Anwendung auch nicht bekommen.

Warum kommt dieses Forum nicht ohne diesen überheblichen Ton Anderen gegenüber aus ! Schade !
Benutzeravatar
Axel-WAK
User
Beiträge: 62
Registriert: Dienstag 29. November 2022, 11:52

Eigentlich sollte das genügen (in PyQt5)

Code: Alles auswählen

wnd.setWindowFlags(Qt.WindowStaysOnTopHint)
in PyQt6

Code: Alles auswählen

wnd.setWindowFlags(Qt.WindowType.WindowStaysOnTopHint)
OS: LMDE5 *** Homepage *** Github Seite
Karsten Böhme
User
Beiträge: 86
Registriert: Sonntag 23. Dezember 2012, 07:54

Vielen Dank,

ich probiere es gleich aus. Habe PySide6 also im Prinzip analog PyQt6.
Karsten Böhme
User
Beiträge: 86
Registriert: Sonntag 23. Dezember 2012, 07:54

klappt leider nicht. Also weitersuchen :)
Karsten Böhme
User
Beiträge: 86
Registriert: Sonntag 23. Dezember 2012, 07:54

@Axel-WAK :

Es funktioniert doch ! Hatte es in der __init__ weiter unten durch

Code: Alles auswählen

wnd.setWindowFlags(Qt.WindowSystemMenuHint)
überschrieben.

Jetzt :

Code: Alles auswählen

self.setWindowFlags(Qt.WindowSystemMenuHint | Qt.WindowType.WindowStaysOnTopHint)
Vielen Dank !
Antworten