PyQt - Transparent Hintergrund
-
12-09-2019 - |
Frage
Ich versuche, den Hintergrund von meinem Fenster transparent zu machen. Aber unter Widgets, die auf sie sind ich sehe Teile meines Desktop-Bild. Jetzt habe ich diese im Konstruktor:
self.setFocusPolicy(Qt.StrongFocus) self.setAttribute(Qt.WA_QuitOnClose,True) self.setBackgroundRole(QtGui.QPalette.Base) self.setAttribute(Qt.WA_NoSystemBackground)
Lösung
Im Anschluss an gs Antwort, diese FAQ erklärt, warum (vor Qt 4.5) Sie können dies nicht erreichen:
Es gibt keine direkte Unterstützung für Teil Transparenz, wo das Fenster transparent und die Widgets auf sie sind nicht in Qt.
Denken Sie daran, PyQt die neueste Version gegen Qt 4.4 erstellt wurde und so nicht das halbtransparente Fenster unterstützt Sie wünschen. gs der andere Antwort, über setAutoFillBackground (True) funktionieren würde, wenn Sie die Hintergrundfarbe des Hauptfensters auf etwas anderes als transparente Einstellung wurden.
Auch hierzu finden Sie in der Dokumentation zu Qt.WA_NoSystemBackground, sagt es Ihnen nicht auf dem transparenten Effekt abhängen können, die Sie bisher hatte:
Gibt an, dass das Widget nicht hat Hintergrund, das heißt, wenn das Widget empfängt Farbe Ereignisse, der Hintergrund wird nicht automatisch neu gestrichen. Hinweis: Im Gegensatz zu WA_OpaquePaintEvent, neu belichteten Bereiche werden nie gefüllt mit Hintergrund (z.B nach einem zeigt, Fenster zum ersten der Benutzer Zeit kann siehe „bis“ es bis zur Anwendung verarbeitet die Farbe Ereignisse). Das ist Set / durch die Widget-Autor gelöscht.
Andere Tipps
Ich habe gerade dieses :
Erstellen transparente Fenster
Da Qt 4.5 ist es möglich gewesen, erstellen Fenster mit lichtdurchlässigem Regionen auf Fenstersystemen, die Unterstützung Compositing.
diese Funktion in einem Top-Level aktivieren widget, setzen Sie seine Qt :: WA_TranslucentBackground Attribut mit setAttribute () und sorgen dafür, dass ihr Hintergrund gemalt mit Nicht-opake Farben in den Regionen, die Sie will teilweise transparent sein.
PyQt ist noch Qt 4.4, vielleicht ist das das Problem ist.
Versuchen Sie dies für Ihre Widgets:
widget.setAutoFillBackground(True)
Ich glaube, Sie auch in dem Qt-Designer einstellen könnten.