You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

CustomTkinter标签背景透明化问题求助

CustomTkinter标签背景透明化问题求助

嘿,我懂你现在的困扰——想让那个写着"Welcome Back to Our Website!"的标签背景透明,结果现在显示的是窗口的默认黑色背景对吧?其实在CustomTkinter里解决这个问题不难,咱们一步步来调整:

核心问题所在

你当前的代码里,把目标标签直接放在了主窗口app上,但你的背景图片是放在background_frame这个子框架里的。这就导致标签的透明背景"透"到的是主窗口的默认背景,而不是你想要的那张背景图片,所以才会显示黑色。

解决方法:调整标签的父容器

只需要把标签的父组件从app改成background_frame,这样标签的透明背景就能正确透到背后的背景图片上了。

修改这一行代码:

# 原来的代码:
label = ctk.CTkLabel(app, text="Welcome Back to Our Website!")
# 修改为:
label = ctk.CTkLabel(background_frame, text="Welcome Back to Our Website!")

另外,你可以把fg_colortext_color的设置直接放到标签创建时,这样代码更简洁:

label = ctk.CTkLabel(background_frame, text="Welcome Back to Our Website!", fg_color="transparent", text_color="white")

额外排查点

如果修改后还是没效果,建议你检查一下CustomTkinter的版本,有些旧版本对transparent属性的支持不够完善,升级到最新版本试试:

pip install --upgrade customtkinter

修改后的完整代码如下:

import customtkinter as ctk
from PIL import Image, ImageTk

def update_background(event):
    # Get the current window size
    width = event.width
    height = event.height
    
    # Resize the background image
    bg_image_resized = bg_image.resize((width, height))
    bg_photo = ImageTk.PhotoImage(bg_image_resized)
    
    # Update the background image in the Label
    background_label.configure(image=bg_photo)
    background_label.image = bg_photo  # Keep a reference to the image

# Initialize window
ctk.set_appearance_mode("System")
ctk.set_default_color_theme("blue")

app = ctk.CTk()
app.title("Responsive Window")
app.geometry("600x400")

# Local image path
image_path = r"C:/Users/USUARIO/Downloads/IMAGEN.jpeg"  # Make sure to use 'r' for paths in Windows

# Load the original image
bg_image = Image.open(image_path)

# Create a Frame with the background image
bg_image_resized = bg_image.resize((600, 400))  # Initially adjust the size of the image
bg_photo = ImageTk.PhotoImage(bg_image_resized)

background_frame = ctk.CTkFrame(app)
background_frame.place(x=0, y=0, relwidth=1, relheight=1)

background_label = ctk.CTkLabel(background_frame, image=bg_photo, text="")
background_label.place(x=0, y=0, relwidth=1, relheight=1)

# Add a responsive button
button = ctk.CTkButton(app, text="click me")
button.place(relx=0.5, rely=0.5, anchor="center")

# 调整标签的父容器为background_frame,并直接设置透明背景和白色文字
label = ctk.CTkLabel(background_frame, text="Welcome Back to Our Website!", fg_color="transparent", text_color="white")
label.place(relx=0.5, rely=0.4, anchor="center")  

# Bind the resize event to update the background
app.bind("<Configure>", update_background)

# Run the main loop
app.mainloop()

这样调整后,标签的背景应该就能透明,正确显示背后的背景图片啦!

备注:内容来源于stack exchange,提问作者juan sebastian giraldo

火山引擎 最新活动