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

如何在不使用Pillow的Tkinter应用中用grid布局放置图片

在Tkinter grid布局中展示PhotoImage加载的图片(无需Pillow)

问题场景

正在开发名为“Gift-wrapping with Sally”的Tkinter应用,采用grid布局组织问卷界面,已通过tkinter.PhotoImage加载了壁纸图片,但不知道后续如何编写代码将图片通过grid布局放置到界面中,且要求不使用Pillow库。相关代码片段如下:

import tkinter
from tkinter import ttk

window = tkinter.Tk()
window.title("Gift-wrapping with Sally")

frame = tkinter.Frame(window)
frame.pack()

... 

#Wallpaper Legnth
wallpaper_legnth_label = tkinter.Label(giftwrapping_frame, text= "How much wallpaper would you like? (Metres)")
wallpaper_legnth_spinbox = tkinter.Spinbox(giftwrapping_frame, from_= 0.5, to= 4)
wallpaper_legnth_label.grid (row= 1, column= 0)
wallpaper_legnth_spinbox.grid (row= 2, column= 0)

#Need to preview the two wallpaper prints to choose from
wallpaper_prints = tkinter.PhotoImage(file= r"C:\Users\PycharmProjects\pythonProject14\Wallpaper Prints.png")
wallpaper_prints_label = tkinter.Label

解决方案

只需完成以下3步即可实现图片的grid布局展示:

  • 正确初始化Label组件并传入加载好的图片对象
  • 保留图片对象的引用,避免被Python垃圾回收机制清理
  • 调用grid()方法将Label放置到指定位置

修改后的完整代码片段如下:

# 加载壁纸图片
wallpaper_prints = tkinter.PhotoImage(file=r"C:\Users\PycharmProjects\pythonProject14\Wallpaper Prints.png")
# 初始化Label组件,将图片传入image参数
wallpaper_prints_label = tkinter.Label(giftwrapping_frame, image=wallpaper_prints)
# 关键:将图片对象绑定到Label的属性上,防止被垃圾回收
wallpaper_prints_label.image = wallpaper_prints
# 使用grid布局放置Label,可根据界面需求调整row、column及边距参数
wallpaper_prints_label.grid(row=3, column=0, padx=10, pady=10)

关键说明

  • 必须保留图片引用:Tkinter的PhotoImage仅在有Python变量引用它时才会生效,如果没有绑定引用,即使Label组件声明使用了该图片,Python的垃圾回收也会将其清理,导致图片无法显示。
  • 可灵活调整grid参数:padx/pady用于设置图片与其他组件的间距,sticky参数可控制图片在单元格内的对齐方式(比如sticky="nsew"让图片填充单元格)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 19:15:03