PyQt: sfondo trasparente
-
12-09-2019 - |
Domanda
Cerco di rendere trasparente lo sfondo della mia finestra.Ma sotto i widget che sono presenti vedo parti della mia immagine desktop.Ora ho questo nel costruttore:
self.setFocusPolicy(Qt.StrongFocus) self.setAttribute(Qt.WA_QuitOnClose,True) self.setBackgroundRole(QtGui.QPalette.Base) self.setAttribute(Qt.WA_NoSystemBackground)
Soluzione
Oltre alla risposta di gs, questa faq spiega perché (prima di Qt 4.5) non è possibile ottenere questo risultato:
Collegamento alle domande frequenti:
Non esiste un supporto diretto per la trasparenza parziale, in cui la finestra è trasparente e i widget su di essa non sono in QT.
Ricorda, la versione più recente di PyQt è stata creata contro Qt 4.4 e quindi non supporta la finestra semitrasparente che desideri.L'altra risposta di gs, su setAutoFillBackground(True), funzionerebbe se impostassi il colore di sfondo della finestra principale su qualcosa di diverso da trasparente.
Inoltre, consulta la documentazione per Qt.WA_NoSystemBackground, dice che non puoi dipendere dall'effetto trasparente che hai avuto finora:
Indica che il widget non ha uno sfondo, cioèQuando il widget riceve eventi di verniciatura, lo sfondo non viene automaticamente riverniciato.Nota:A differenza di WA_OPAQUEPAINTEvent, le aree appena esposte non vengono mai riempite con lo sfondo (ad esempio dopo aver mostrato una finestra per la prima volta che l'utente può vedere "attraverso" fino a quando l'applicazione non elabora gli eventi di verniciatura).Questo è impostato/cancellato dall'autore del widget.
Altri suggerimenti
ho appena trovato questo :
Creazione traslucido di Windows
Dal Qt 4.5, è stato possibile creare finestre con traslucido regioni sui sistemi di finestre che supportano compositing.
Per attivare questa funzionalità in un top-level widget di, impostare la sua attributo Qt :: WA_TranslucentBackground con setAttribute () e verificare che il suo sfondo è dipinta con colori non opachi nelle regioni che si vogliono essere parzialmente trasparente.
PyQt è ancora Qt 4.4, forse è questo il problema.
Prova questo per i widget:
widget.setAutoFillBackground(True)
Penso che si potrebbe anche impostarlo nel Designer Qt.