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)
È stato utile?

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:

Qt::WA_NoSystemBackground

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top