如何为现有CustomTkinter界面设置PNG背景图片(支持响应式)
给CustomTkinter随机选名界面添加背景图
静态背景实现步骤
- 导入依赖模块:
customtkinter、PIL.Image、PIL.ImageTk - 读取背景图片后,创建一个CTkLabel作为背景容器,用
place方法让它铺满整个窗口 - 将功能控件(选名按钮、结果标签等)放在背景标签上方,并设置控件的
fg_color="transparent",确保背景可见
响应式背景优化(窗口缩放时自动适配)
- 绑定窗口的
<Configure>事件,触发时重新缩放图片并更新背景标签 - 使用LANCZOS插值算法缩放图片,保证缩放后的清晰度,避免拉伸变形
完整示例代码
import customtkinter as ctk from PIL import Image, ImageTk import random class RandomNameApp(ctk.CTk): def __init__(self): super().__init__() self.title("随机选名工具") self.geometry("800x600") # 读取背景图片 self.bg_image = Image.open("Imagen.png") self.bg_photo = None # 创建背景标签并铺满窗口 self.bg_label = ctk.CTkLabel(self, text="") self.bg_label.place(x=0, y=0, relwidth=1, relheight=1) self.update_bg_image() # 绑定窗口大小变化事件,实现响应式适配 self.bind("<Configure>", lambda _: self.update_bg_image()) # 随机选名功能控件 self.name_pool = ["张三", "李四", "王五", "赵六", "孙七", "周八"] self.result_display = ctk.CTkLabel( self, text="点击按钮开始随机选名", font=("Arial", 22), fg_color="transparent" ) self.result_display.pack(pady=80) self.pick_btn = ctk.CTkButton( self, text="抽取名字", font=("Arial", 16), command=self.draw_random_name ) self.pick_btn.pack(pady=30) def update_bg_image(self): # 获取当前窗口尺寸 win_w, win_h = self.winfo_width(), self.winfo_height() # 缩放图片保持窗口比例 resized_img = self.bg_image.resize((win_w, win_h), Image.Resampling.LANCZOS) self.bg_photo = ImageTk.PhotoImage(resized_img) self.bg_label.configure(image=self.bg_photo) def draw_random_name(self): chosen_name = random.choice(self.name_pool) self.result_display.configure(text=f"本次选中:{chosen_name}") if __name__ == "__main__": app = RandomNameApp() app.mainloop()
注意事项
- 确保
Imagen.png与代码文件在同一目录,或使用完整文件路径读取图片 - 若不需要响应式效果,只需删除窗口绑定事件的代码,并在初始化时直接设置一次图片大小即可
内容的提问来源于stack exchange,提问作者Pandas INC
相关产品推荐
相关产品推荐

