You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CustomTkinter中CTkEntry无法设置透明背景的问题

解决CustomTkentry和CTkLabel透明背景不生效的问题

为啥直接设fg_color="transparent"没用?
CustomTkinter里有些组件(比如CTkEntry)的fg_color只控制外层容器的背景,内部的输入框还保留默认样式;另外组件默认的圆角、边框这些样式也会填充浅灰色,导致透明效果出不来。

具体怎么调:

1. 搞定文字CTkLabel的透明

除了设置fg_color="transparent",还要把圆角关掉(圆角区域会默认填充背景色),代码修改如下:

self.label = ctk.CTkLabel(self, text="Start X (meters)", 
                          fg_color="transparent", 
                          text_color="white", 
                          font=label_font,
                          corner_radius=0)  # 移除圆角的背景填充

2. 处理CTkEntry的透明

CTkEntry内部是原生tkinter的Entry组件,需要同时修改外层容器和内部输入框的样式:

self.entry = ctk.CTkEntry(self, 
                          fg_color="transparent", 
                          text_color="black", 
                          font=display_font, 
                          width=150,
                          border_width=0,  # 移除边框
                          corner_radius=0)  # 移除圆角背景
# 修改内部原生输入框样式:透明背景+无边框
self.entry._entry.config(bg='systemTransparent', relief='flat')
# Windows系统下需额外添加,移除选中时的高亮边框
self.entry._entry.config(highlightthickness=0)

3. 确保层级布局正确

你已经将三个组件放在同一个grid单元格中,需要保证背景图标签在最底层,避免被上层组件遮挡:

# 将背景图标签移至最下层
self.image_label.lower()

修改后的完整代码示例

self.bg_image = ctk.CTkImage(
    light_image=Image.open(r"C:\Users\sevil\OneDrive\Documents\Projects\Star Citizen\Old_Crow_Repository\Old-Crow\images\controls_images\bg_miniDisplay.png"),
    dark_image=Image.open(r"C:\Users\sevil\OneDrive\Documents\Projects\Star Citizen\Old_Crow_Repository\Old-Crow\images\controls_images\bg_miniDisplay.png"),
    size=(313, 129)
)
# 布局配置
self.grid_rowconfigure(0, weight=1)
self.grid_columnconfigure(0, weight=1, minsize=width)
self.grid_columnconfigure(1, weight=1)

# 背景图标签
self.image_label = ctk.CTkLabel(self, image=self.bg_image)
self.image_label.grid(row=0, column=0, sticky="nsew") 

# 输入框
self.entry = ctk.CTkEntry(self, 
                          fg_color="transparent", 
                          text_color="black", 
                          font=display_font, 
                          width=150,
                          border_width=0,
                          corner_radius=0)
self.entry.grid(row=0, column=0, pady=32, sticky="n")
# 修改内部原生Entry样式
self.entry._entry.config(bg='systemTransparent', relief='flat', highlightthickness=0)

# 文字标签
self.label = ctk.CTkLabel(self, text="Start X (meters)", 
                          fg_color="transparent", 
                          text_color="white", 
                          font=label_font,
                          corner_radius=0)
self.label.grid(row=0, column=0, sticky="n")

# 调整层级,确保背景图在最底层
self.image_label.lower()

额外说明:

  • systemTransparent是tkinter支持的系统透明值,若在Linux或macOS下不生效,可尝试替换为空字符串''或对应系统的透明色值。
  • 若仍未生效,可尝试切换CustomTkinter的外观模式(如ctk.set_appearance_mode("light")),部分主题样式会干扰透明效果。

内容的提问来源于stack exchange,提问作者Sevil Natas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 05:44:54