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
相关产品推荐
相关产品推荐

