Question

Est-il possible d'obtenir une fenêtre totalement transparente dans Pygame (voir le bureau à travers elle)? J'ai trouvé comment créer une fenêtre sans cadre, mais il ne semble pas être une façon évidente pour le rendre transparent.

Je serais prêt à lier en technologie / cadres spécifiques au système tant qu'il existe des solutions pour Windows et Mac OS X, mais je ne suis pas sûr de la direction à la recherche.

Le seul sujet que j'ai pu trouver a recommandé d'utiliser wxPython, qui n » est pas t quelque chose que je peux faire pour ce projet particulier (doit être Pygame).

Était-ce utile?

La solution

PyGame utilise SDL, qui ne prend pas en charge des fenêtres transparentes. Bien au moins sur Linux le rendant transparent est fait par le gestionnaire de fenêtres, pas l'application.

Autres conseils

Sous Windows, vous pouvez créer une couleur de fond solide puis définir la couleur de transparence de la fenêtre avec la fonction API Win32 SetLayeredWindowAttributes() . (Appelé avec pywin32 )

Code:

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

Résultat:

Explication:

Toute partie de la fenêtre en utilisant votre couleur de transparence sera totalement transparent. Vous pouvez visualiser et d'interagir avec les icônes de bureau ou des programmes situés derrière la fenêtre de jeu.

Pour supprimer la bordure de fenêtre, vous pouvez définir le mode d'affichage de Pygame à NOFRAME.

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

Voir aussi:

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top