PyQt - Arrière-plan transparent
-
12-09-2019 - |
Question
J'essaie de rendre le fond transparent de ma fenêtre. Mais sous les widgets qui sont sur ce que je vois certaines parties de mon bureau image. Maintenant, j'ai ce dans le constructeur:
self.setFocusPolicy(Qt.StrongFocus) self.setAttribute(Qt.WA_QuitOnClose,True) self.setBackgroundRole(QtGui.QPalette.Base) self.setAttribute(Qt.WA_NoSystemBackground)
La solution
Suite à la réponse de gs, cette FAQ explique pourquoi (avant Qt 4.5) vous ne pouvez pas y parvenir:
Il n'y a pas un soutien direct pour partiel la transparence, où la fenêtre est transparent et les widgets sur celui-ci sont pas dans Qt.
Rappelez-vous, la version la plus récente de PyQt a été créé contre Qt 4.4, et ainsi ne supporte pas la fenêtre semi-transparente vous désirez. autre réponse gs, au sujet setAutoFillBackground (vrai) fonctionnerait si vous définissez la couleur de fond de votre fenêtre principale pour autre chose que transparent.
En outre, consultez la documentation Qt.WA_NoSystemBackground, il dit que vous ne pouvez pas dépendre de l'effet transparent que vous avez eu jusqu'à présent:
Indique que le widget n'a pas arrière-plan, à savoir lorsque le widget reçoit des événements de peinture, l'arrière-plan est pas automatiquement repeint. Remarque: Contrairement à WA_OpaquePaintEvent, nouvellement les zones exposées ne sont jamais remplis l'arrière-plan (par exemple, après avoir affiché un fenêtre pour la première fois, l'utilisateur peut voir « à travers » jusqu'à ce que l'application traite les événements de peinture). C'est défini / par l'auteur du widget.
Autres conseils
Je viens de trouver cette :
Création d'Translucide de Windows
Depuis Qt 4.5, il a été possible de créer des fenêtres avec translucide régions sur les systèmes de fenêtres qui soutiennent compositing.
Pour activer cette fonctionnalité dans un haut niveau widget définir sa attribut Qt :: WA_TranslucentBackground avec setAttribute () et faire en sorte que son arrière-plan est peint avec couleurs non opaques dans les régions que vous veulent être partiellement transparent.
PyQt est encore Qt 4.4, peut-être que le problème est.
Essayez ceci pour vos widgets:
widget.setAutoFillBackground(True)
Je pense que vous pouvez également définir ce paramètre dans le Qt Designer.