将窗体设置为透明:
import pygame
import sys
from pygame.locals import *
import win32gui, win32api
from win32.lib import win32con
def make_window_transparent(hwnd):
# 设置窗口为分层窗口
win32gui.SetWindowLong(hwnd, win32con.GWL_EXSTYLE, win32gui.GetWindowLong(hwnd, win32con.GWL_EXSTYLE) | win32con.WS_EX_LAYERED)
# 设置窗口为完全透明
win32gui.SetLayeredWindowAttributes(hwnd, win32api.RGB(0,0,0), 0, win32con.LWA_COLORKEY)
def main():
pygame.init()
screen = pygame.display.set_mode((400, 400), pygame.NOFRAME)
hwnd = pygame.display.get_wm_info()["window"]
make_window_transparent(hwnd)
clock = pygame.time.Clock()
# 加载具有透明通道的图像
sprite_image = pygame.image.load('IMG_8566.JPG').convert_alpha()
sprite_image = pygame.transform.scale(sprite_image, (sprite_image.get_width() // 4, sprite_image.get_height() //4))
sprite_rect = sprite_image.get_rect()
sprite_image.set_colorkey(pygame.Color(255, 255, 255))
sprite_rect.center = (200, 200) # 设置精灵初始位置在屏幕中央
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
screen.fill(pygame.Color(0, 0, 0)) # 使用黑色作为透明颜色键
# 绘制精灵
screen.blit(sprite_image, sprite_rect)
pygame.display.flip()
clock.tick(60)
if __name__ == '__main__':
main()
这里make_window_transparent(hwnd)最重要,它获得窗体句柄,在底层操作使窗体透明,这个步骤无法在pygame里完成!不写成函数也可以:
import pygame
import sys
from pygame.locals import *
import win32gui, win32api
from win32.lib import win32con
def main():
pygame.init()
screen = pygame.display.set_mode((400, 400), pygame.NOFRAME)
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(0,0,0), 0, win32con.LWA_COLORKEY)
clock = pygame.time.Clock()
# 设置窗口为完全透明
# 加载具有透明通道的图像
sprite_image = pygame.image.load('IMG_8566.JPG').convert_alpha()
sprite_image = pygame.transform.scale(sprite_image, (sprite_image.get_width() // 4, sprite_image.get_height() //4))
sprite_rect = sprite_image.get_rect()
sprite_image.set_colorkey(pygame.Color(255, 255, 255))
sprite_rect.center = (200, 200) # 设置精灵初始位置在屏幕中央
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
screen.fill(pygame.Color(0, 0, 0)) # 使用黑色作为透明颜色键
# 绘制精灵
screen.blit(sprite_image, sprite_rect)
pygame.display.flip()
clock.tick(60)
if __name__ == '__main__':
main()