问题
Im trying to make a transparent window for a splash screen for my game. The image has transparency but I cant make the window transparent(like see screen, desktop, etc.. behind it) All I've found is a no-go with pygame. Is there any external libraries that I could pull from to make this possible? BTW. This is entirely a Linux project. So os specific are ok too.
#Splash Screen
screen = pygame.display.set_mode((680,300), NOFRAME)
splashbg = pygame.image.load("Images/SplashBG.png")
font = pygame.font.Font(None, 36)
pygame.mixer.music.load("OriginalEnd.mp3")
pygame.mixer.music.play(-1)
screen.blit(splashbg,(0,0))
loadingtext = font.render("Loading...", 1, (255,255,255))
screen.blit(loadingtext, (200,250))
pygame.display.flip()
pygame.time.delay(4000)
回答1:
You could always ghetto version it with pretend transparency. It's not an ideal solution by any means, but it may work..
Before you launch your screen, use PIL to take a snapshot of the desktop, blit that first, and then draw your transparent image over it. That way it'll at least give the illusion of transparency.
Something kind of like:
import ImageGrab, Image
im = Imagegrab.grab()
im.save('faux_trans.png','png')
for_trans = pygame.image.load('faux_trans.png').convert()
splash = pygame.image.load....
screen.blit(for_trans, (0,0))
# and so on.
Like I said, not the greatest solution, but if you launch your game NOFRAME, or FULLSCREEN, you may be able to get away with it! :)
回答2:
For a cross-platform solution, you can use the Raylib-Python-CFFI library.
Raylib features 2D, 3D, font-drawing, and much more than can be drawn on a transparent window:
Cross platform transparent window
Source code from above example:
from raylib.dynamic import raylib as rl, ffi
rl.SetConfigFlags(rl.FLAG_WINDOW_TRANSPARENT | rl.FLAG_WINDOW_RESIZABLE)
rl.InitWindow(800, 600, b'Transparency Test')
CLEAR = [0] * 4
GREEN = [140, 189, 72, 255]
font_size = 60
camera = ffi.new("struct Camera3D *", [[18.0, 16.0, 18.0], [0.0, 0.0, 0.0], [0.0, 1.0, 0.0], 45.0, 0])
rl.SetCameraMode(camera[0], rl.CAMERA_ORBITAL)
while not rl.WindowShouldClose():
rl.UpdateCamera(camera)
rl.BeginDrawing()
rl.ClearBackground(CLEAR)
rl.BeginMode3D(camera[0])
rl.DrawGrid(20, 1)
rl.DrawCube([0, 0, 0], 2, 2, 2, GREEN)
rl.EndMode3D()
rl.DrawText(b'Hello World', 64, 64, font_size, GREEN)
rl.EndDrawing()
来源:https://stackoverflow.com/questions/10369973/transparent-window-in-pygame-or-python