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

如何为Tkinter窗口添加图片并让窗口自动适配图片尺寸

给Tkinter移动窗口添加背景图片的解决方案

要给Tkinter窗口加背景图片,不能直接给窗口本身设置,得用Label组件承载图片并铺满整个窗口。如果你的图片是PNG/JPG格式,需要先安装Pillow库(原生Tkinter的PhotoImage只支持GIF、PGM/PPM格式)。

步骤1:安装Pillow(如需处理非GIF图片)

打开命令行执行:

pip install pillow

步骤2:修改代码

下面是添加了背景图片功能的完整代码,关键改动都加了注释:

import random
from time import sleep
from tkinter import *
# 导入Pillow模块(如果用GIF图可以注释掉这两行)
from PIL import Image, ImageTk

x = random.randint(7,20)
y = random.randint(7,20)
h = random.randint(200,300)
w = random.randint(200,300)

class Window(Tk):
    def __init__(self):
        Tk.__init__(self)
        self.width = w
        self.height = h
        self.velx = x
        self.vely = y
        self.pos = (250,250)
        self.geometry(f"{self.width}x{self.height}+{self.pos[0]}+{self.pos[1]}")
        
        # ---- 新增:加载背景图片 ----
        # 替换成你的图片路径,比如和代码同目录就写文件名
        image_path = "bg_image.png"
        # 打开图片并调整大小匹配窗口
        img = Image.open(image_path).resize((self.width, self.height))
        # 转成Tkinter能识别的格式
        self.bg_img = ImageTk.PhotoImage(img)
        # 创建Label承载图片
        bg_label = Label(self, image=self.bg_img)
        # 让Label铺满整个窗口
        bg_label.place(x=0, y=0, relwidth=1, relheight=1)
        # --------------------------

    def moveWin(self):
        x = self.pos[0] + self.velx
        y = self.pos[1] + self.vely
        downx, downy = x+self.width, y+self.height
        sWidth = self.winfo_screenwidth()  # 屏幕宽度
        sHeight = self.winfo_screenheight()  # 屏幕高度
        if x <= 0 or downx >= sWidth:
            self.velx = -self.velx
        if y <= 0 or downy >= sHeight:
            self.vely = -self.vely
        self.pos = (x,y)
        self.geometry(f"+{x}+{y}")
        return [x, y, downx, downy]

root = Window()
while True:
    root.update()
    pos = root.moveWin()
    print(pos)
    sleep(0.01)

关键说明

  1. 图片路径:把image_path改成你实际的图片路径,比如图片和代码在同一个文件夹里,直接写"bg.png"就行。
  2. 图片保留:必须把图片对象存为实例属性(self.bg_img),不然Python的垃圾回收会把图片销毁,导致窗口里看不到图片。
  3. GIF图兼容:如果用GIF格式的图片,可以不用Pillow,把Pillow的导入注释掉,换成下面的代码加载图片:
self.bg_img = PhotoImage(file="bg.gif")
  1. 窗口大小适配:代码里用resize((self.width, self.height))把图片调整成和窗口一样大,如果你想让图片按比例缩放,可以去掉这部分,不过可能会有留白或者超出窗口。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 19:01:09