pyqt windows-vista dwm aero-glass

pyqt - Qt: Borrar el fondo(Windows Aero Glass)



windows-vista dwm (2)

He estado buscando en Google por un tiempo, así que pensé en compartir la solución:

reemplace WA_NoSystemBackground por WA_TranslucentBackground y olvídese del mousepressevent

ahora la ventana es Aero Glass transparente y re-renderizada automáticamente cuando sea necesario, yay :)

Actualizar

vea Usar Blur Behind en Windows para ver un ejemplo del uso de Qt y DWM . texto alternativo http://labs.trolltech.com/blogs/wp-content/uploads/2009/09/blurbehind2.png

Pregunta original:

Quiero crear una ventana Windows Aero Glass con Qt, ahora se ve así:

Pero después de llamar a algunos my_window->repaint() la etiqueta de mi ventana se rompe:

Pero ahora si cambio el tamaño de la ventana ligeramente, se vuelve a pintar correctamente.

La pregunta es : ¿cómo borro el fondo de la ventana para que los widgets se pinten sobre un cristal limpio?

El código corto para reproducir el problema es (Vista con Aero):

class Window(QWidget): def __init__(self, *args): QWidget.__init__(self, *args) self.setLayout(QVBoxLayout()) self.layout().addWidget(QLabel("This is the text")) # let the whole window be a glass self.setAttribute(Qt.WA_NoSystemBackground) from ctypes import windll, c_int, byref windll.dwmapi.DwmExtendFrameIntoClientArea(c_int(self.winId()), byref(c_int(-1))) def mousePressEvent(self, event): self.repaint()

Puede hacer clic en la ventana ahora, o simplemente presionar Alt-Tab varias veces.

De todos modos, usar etiquetas con Aero Glass no es lo que necesito, porque QLabel no sabe cómo pintarse a sí mismo con un resplandor (como el título de la ventana). Lo que necesito es una forma general de limpiar el "cristal".