PyQt - fundo transparente
-
12-09-2019 - |
Pergunta
Eu tento fazer o fundo da minha janela transparente. Mas, sob os widgets que estão nele i ver partes de meu desktop-imagem. Agora eu tenho isso no construtor:
self.setFocusPolicy(Qt.StrongFocus) self.setAttribute(Qt.WA_QuitOnClose,True) self.setBackgroundRole(QtGui.QPalette.Base) self.setAttribute(Qt.WA_NoSystemBackground)
Solução
Na sequência da resposta da GS, este FAQ explica porque (antes Qt 4.5) você não pode conseguir isso:
Não há suporte direto para parcial transparência, onde a janela é transparente e os widgets em que são não em Qt.
Lembre-se, a versão mais recente do PyQt foi criado contra o Qt 4.4, e assim não suporta a janela semi-transparente que você deseja. outra resposta da GS, sobre setAutoFillBackground (True) iria funcionar se você estivesse definindo a cor de sua janela principal do fundo a qualquer coisa que não seja transparente.
Além disso, consulte a documentação para Qt.WA_NoSystemBackground, ele diz que você não pode depender do efeito transparente que até agora tinha:
Indica que o widget não tem fundo, ou seja, quando o widget recebe eventos de pintura, o fundo não é redesenhada automaticamente. Nota: Ao contrário WA_OpaquePaintEvent, recém áreas expostas nunca são preenchidos com o plano de fundo (por exemplo, depois de mostrar um janela para a primeira vez que o usuário pode ver "através"-lo até que o aplicativo processa os eventos de pintura). Isto é set / afastada pelo autor do widget.
Outras dicas
Eu apenas encontrei este :
Criando translúcido do Windows
Desde Qt 4.5, tem sido possível criar janelas com translúcido regiões em sistemas de janela que o apoio composição.
Para ativar esse recurso em um de nível superior widget, definir o seu atributo Qt :: WA_TranslucentBackground com setAttribute () e assegurar que seu fundo é pintado com cores não opaco nas regiões você quer ser parcialmente transparente.
PyQt ainda é Qt 4.4, talvez seja o problema.
Tente isto para seus widgets:
widget.setAutoFillBackground(True)
Eu acho que você também pode configurá-lo no Qt Designer.