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

Tkinter中ImageTk.PhotoImage缩放图片后无法显示问题求助

Tkinter缩放后图片无法显示的解决方法

你的代码存在两个关键问题导致缩放后图片无法显示:

  • 完整代码中的select_file函数遗漏了将生成的图片添加到Canvas的步骤(核心函数里有这行,但完整代码里未实现);
  • ImageTk.PhotoImage创建的对象如果是局部变量,会被Python的垃圾回收机制回收,导致Canvas无法引用到图片资源,最终显示空白。

修复方案

  1. 补充canvas.create_image代码,将缩放后的图片添加到Canvas;
  2. 通过将PhotoImage对象绑定到Canvas的属性(或使用全局变量),保持对它的引用,避免被垃圾回收。

修改后的完整代码

from tkinter import *
from tkinter import filedialog as fd
from PIL import Image, ImageTk

# Create a window
window = Tk()
window.title('Watermarking')
window.config(pady=50, padx=50)
window['bg'] = '#B3CFF2'

filename = ''

# ---- Functions ---- #

def select_file():
    filetypes = [('Image files', '*.jpg'), ('Image files', '*.png'), ('Image files', '*.jpeg')]
    global filename
    filename = fd.askopenfilename(title='open a file', initialdir='/', filetypes=filetypes)
    if not filename:  # 处理用户取消选择文件的情况
        return
    canvas.delete("all")
    img_new = Image.open(filename)
    r_image = img_new.resize((200, 200))
    n_image = ImageTk.PhotoImage(r_image)
    # 将图片对象绑定到canvas属性,避免被垃圾回收
    canvas.image = n_image
    # 在Canvas中心添加图片
    canvas.create_image(100, 100, image=n_image)

# ----- UI ------ #
# Create Canvas
canvas = Canvas(height=200, width=200, bg='skyblue')
canvas.grid(column=1, row=0)
img = PhotoImage(file='computer-r.png')
canvas.image = img  # 绑定初始图片的引用
canvas.create_image(100, 100, image=img)

# Create Buttons
add_img = PhotoImage(file='assests/button_add-image.png')
add_img_button = Button(image=add_img, borderwidth=0, bg='#B3CFF2', activebackground="#B3CFF2", command=select_file)
add_img_button.grid(column=0, row=0, pady=50)

window.mainloop()

补充说明

  • canvas.image = n_image 是核心修复点:把PhotoImage对象挂载到Canvas实例上,让Python保持对该对象的引用,避免被垃圾回收;
  • 新增的if not filename: return 可以防止用户取消选择文件后,后续代码因空路径报错;
  • 初始图片也做了同样的引用绑定,确保界面稳定性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 15:10:16