Pygame中完全透明的窗户?

One*_*yon 6 python graphics pygame sdl

是否有可能在Pygame中获得一个完全透明的窗口(通过它看到桌面)?我已经找到了如何创建一个没有框架的窗口,但似乎没有任何明显的方法使它透明.

只要有适用于Windows和Mac OS X的解决方案,我愿意与系统特定的技术/框架相结合,但我不确定要查找哪个方向.

我能够找到的唯一主题是使用wxPython推荐的,这不是我能为这个特定项目做的事情(需要是Pygame).

jus*_*nhj 7

PyGame使用SDL,它不支持透明窗口.虽然至少在Linux上使它透明是由窗口管理器完成的,而不是应用程序.


Ste*_*ica 5

在Windows上,您可以创建纯色背景色,然后使用Win32 API函数设置窗口的透明色SetLayeredWindowAttributes()。(用pywin32调用)

码:

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()
Run Code Online (Sandbox Code Playgroud)

结果:

透明的Pygame窗口

说明:

使用透明色的窗口的任何部分将完全透明。您可以查看位于游戏窗口后面的任何桌面图标或程序并与之交互。

要删除窗口边框,可以将Pygame的显示模式设置为NOFRAME

screen = pygame.display.set_mode((800, 600), pygame.NOFRAME)
Run Code Online (Sandbox Code Playgroud)

也可以看看:

  • 这非常有帮助,非常感谢,+1,顺便说一下,有没有办法在 Linux 上做到这一点或类似的事情? (2认同)