Pregunta

¿Es posible obtener una ventana totalmente transparente en Pygame (ver el escritorio a través de él)? He descubierto cómo crear una ventana sin marco, pero no parece haber ninguna manera obvia de hacerlo transparente.

Yo estaría dispuesto a atar en tecnología / marcos específicos del sistema, siempre y cuando hay soluciones para Windows y Mac OS X, pero no estoy seguro de qué dirección debe estar buscando.

El único tema que era capaz de encontrar recomienda el uso de wxPython , que ISN' t algo que pueda hacer para este proyecto en particular (tiene que ser Pygame).

¿Fue útil?

Solución

PyGame utiliza SDL, que no es compatible con ventanas transparentes. Aunque por lo menos en Linux por lo que es transparente está realizado por el gestor de ventanas, no de la aplicación.

Otros consejos

En Windows, se puede crear un color de fondo sólido de color a continuación, establezca la transparencia de la ventana con la función de la API de Win32 SetLayeredWindowAttributes() . (Llamado con pywin32 )

Código:

import pygame
import win32api
import win32con
import win32gui

pygame.init()
screen = pygame.display.set_mode((800, 600)) # For borderless, use pygame.NOFRAME
done = False
fuchsia = (255, 0, 128)  # Transparency color
dark_red = (139, 0, 0)

# Set window transparency color
hwnd = pygame.display.get_wm_info()["window"]
win32gui.SetWindowLong(hwnd, win32con.GWL_EXSTYLE,
                       win32gui.GetWindowLong(hwnd, win32con.GWL_EXSTYLE) | win32con.WS_EX_LAYERED)
win32gui.SetLayeredWindowAttributes(hwnd, win32api.RGB(*fuchsia), 0, win32con.LWA_COLORKEY)

while not done:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            done = True

    screen.fill(fuchsia)  # Transparent background
    pygame.draw.rect(screen, dark_red, pygame.Rect(30, 30, 60, 60))
    pygame.display.update()

Resultados:

ventana Pygame transparente

Explicación:

Cualquier parte de la ventana usando el color de transparencia será totalmente transparente. Puede ver e interactuar con los iconos del escritorio o programas que se encuentran detrás de la ventana de juego.

Para quitar el borde de la ventana, se puede establecer el modo de visualización de Pygame a NOFRAME.

screen = pygame.display.set_mode((800, 600), pygame.NOFRAME)

Ver también:

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top