PySimpleGUI如何仅让窗口透明?alpha_channel致全GUI透明的问题
PySimpleGUI实现窗口透明但元素可见的解决方案
方法1:利用transparent_color参数(跨平台)
这是PySimpleGUI自带的跨平台方案,通过将窗口背景色设置为一个特定的“透明标记色”,让系统自动渲染掉该颜色的区域,而其他颜色的元素会正常显示。
实现步骤
- 选一个不常用的颜色值作为透明色(比如
#000001,避免和元素颜色冲突) - 窗口初始化时,同时设置
background_color和transparent_color为这个透明色 - 所有元素使用与透明色不同的颜色,确保元素可见
代码示例
import PySimpleGUI as sg # 定义专属透明色 TRANSPARENT_COLOR = '#000001' # 布局:自定义关闭按钮 layout = [ [sg.Button('关闭窗口', key='-CLOSE-', button_color=('white', '#FF5733'))] ] # 创建透明窗口 window = sg.Window( '透明窗口示例', layout, background_color=TRANSPARENT_COLOR, transparent_color=TRANSPARENT_COLOR, no_titlebar=True, # 隐藏默认标题栏,避免标题栏也被透明 keep_on_top=True ) # 事件循环 while True: event, values = window.read() if event == '-CLOSE-' or event == sg.WIN_CLOSED: break window.close()
补充说明
- 如果需要保留系统默认标题栏,去掉
no_titlebar=True即可,但标题栏会和窗口背景一起透明 - 该方法支持Windows、macOS、Linux所有主流平台
方法2:Windows平台专属(保留默认标题栏)
如果是Windows系统,可通过Win32 API直接控制窗口分层属性,实现窗口背景透明但保留默认标题栏的效果。
前置准备
先安装依赖库:
pip install pywin32
代码示例
import PySimpleGUI as sg import win32gui import win32api import win32con # 布局:自定义关闭按钮+默认标题栏 layout = [ [sg.Button('关闭窗口', key='-CLOSE-', button_color=('white', '#FF5733'))] ] window = sg.Window('透明窗口示例', layout, background_color='black') # 获取窗口句柄并设置分层属性 hwnd = win32gui.FindWindow(None, '透明窗口示例') 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) # 事件循环 while True: event, values = window.read() if event == '-CLOSE-' or event == sg.WIN_CLOSED: break window.close()
补充说明
- 这里通过
LWA_COLORKEY模式指定透明色,只有窗口中该颜色的区域会被透明 - 适合需要保留系统标题栏的场景,但仅支持Windows系统
内容的提问来源于stack exchange,提问作者Cabbage
相关产品推荐
相关产品推荐

