Transparent Window in Pygame or Python

给你一囗甜甜゛ 提交于 2020-01-01 07:11:09

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!