Domanda

E 'possibile ottenere una finestra completamente trasparente in Pygame (vedere il desktop attraverso di esso)? Ho trovato come creare una finestra senza una cornice, ma non sembra essere un modo ovvio per renderla trasparente.

Sarei disposto a legare in tecnologia / quadri specifici del sistema fino a quando ci sono soluzioni per Windows e Mac OS X, ma non sono sicuro di quale direzione di essere alla ricerca.

L'unico argomento sono stato in grado di trovare consiglia di utilizzare wxPython , che isn' t qualcosa che posso fare per questo particolare progetto (deve essere Pygame).

È stato utile?

Soluzione

PyGame utilizza SDL, che non supporta finestre trasparenti. Anche se, almeno su Linux rendendolo trasparente viene fatto dal gestore di finestre, non l'applicazione.

Altri suggerimenti

In Windows, è possibile creare un colore di sfondo solido quindi impostare il colore di trasparenza della finestra con la funzione API Win32 SetLayeredWindowAttributes() . (Chiamato con pywin32 )

Codice:

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()

Risultato:

Pygame finestra

Spiegazione:

Ogni parte della finestra usando il vostro colore di trasparenza sarà completamente trasparente. È possibile visualizzare e interagire con le icone del desktop o programmi che si trovano dietro la finestra di gioco.

Per rimuovere il bordo della finestra, è possibile impostare la modalità di visualizzazione del Pygame per NOFRAME.

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

Vedere anche:

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