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

如何为现有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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 19:31:08