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

如何将PIL图片数组放入GUI并实现并排显示?

解决图片在CustomTkinter GUI中并排显示的问题

直接给你修改后的可运行代码,再拆解关键改动点:

import customtkinter
import glob
from PIL import Image, ImageTk

MainWindow = customtkinter.CTk()
MainWindow.title("图片归档应用")

SamplePhotos = glob.glob("C:/Users/*****/Desktop/MTGPythonPHotos/*")
# 存储转换后的GUI可用图片对象,必须保留引用否则图片会消失
tk_image_list = []

# 统一图片尺寸,避免窗口布局混乱
target_size = (200, 200)

for idx, image_path in enumerate(SamplePhotos):
    # 打开图片并按目标尺寸缩放
    pil_img = Image.open(image_path).resize(target_size, Image.Resampling.LANCZOS)
    # 转换为CustomTkinter可识别的图片格式
    tk_img = ImageTk.PhotoImage(pil_img)
    tk_image_list.append(tk_img)
    
    # 创建图片标签,用grid实现规整的并排布局(示例每行4张)
    img_label = customtkinter.CTkLabel(MainWindow, image=tk_img, text="")
    row = idx // 4
    col = idx % 4
    img_label.grid(row=row+1, column=col, padx=10, pady=10)

# 显示图片总数标签
count_label = customtkinter.CTkLabel(MainWindow, text=f"共{len(tk_image_list)}张图片", font=("Arial", 30))
count_label.grid(row=0, column=0, columnspan=4, pady=20)

MainWindow.mainloop()

关键改动说明:

  • 格式转换:CustomTkinter的组件无法直接使用PIL的Image对象,必须转成ImageTk.PhotoImage格式才能显示。
  • 保留引用:把转换后的图片对象存入列表tk_image_list,防止Python垃圾回收机制回收这些对象,导致图片无法显示。
  • 尺寸统一:用resize把所有图片缩放到相同大小,避免窗口被不规则尺寸的图片撑乱,LANCZOS是高质量缩放算法。
  • 并排布局:用grid实现行列排列(示例每行4张),如果想要纯横向并排,也可以改用img_label.pack(side=LEFT, padx=10, pady=10)。
  • 冗余清理:删掉了代码里没用到的numpy、cv2等导入,简化代码结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 06:03:20