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

使用Tkinter设置画布背景图并绘制五角星遇图片识别错误求助

问题解决:Tkinter无法识别JPEG图片及五角星绘制错误

错误原因

Tkinter自带的tk.PhotoImage仅支持GIF、PGM、PPM格式,部分版本支持PNG,但原生不支持JPEG,这是图片加载报错的核心原因。另外你代码中绘制五角星的方式存在错误,不能在PhotoImage实例上创建Canvas。

解决方案

1. 安装PIL库处理JPEG

首先通过pip安装Pillow库(PIL的活跃维护分支):

pip install pillow

2. 修改代码

使用PIL.Image和PIL.ImageTk加载JPEG图片,同时直接在主画布上绘制五角星:

import tkinter as tk
from PIL import Image, ImageTk

# 创建窗口
root = tk.Tk()

# 加载并转换JPEG图片
background_image = Image.open("C:\\Users\\Stefa\\Downloads\\galaxy.jpeg")
background_photo = ImageTk.PhotoImage(background_image)

# 创建画布,匹配图片尺寸
canvas = tk.Canvas(root, width=background_image.width, height=background_image.height)
canvas.pack()

# 添加背景图片
canvas.create_image(0, 0, anchor='nw', image=background_photo)

# 定义五角星顶点坐标(适配画布尺寸调整,避免超出范围)
points = [200, 20, 80, 196, 380, 156, 20, 156, 320, 196]

# 直接在主画布绘制五角星
canvas.create_polygon(points, outline='blue', fill='blue')

# 保持图片引用,防止被GC回收
root.background_photo = background_photo

# 启动事件循环
root.mainloop()

关键修改说明

  • 用PIL.Image.open读取JPEG,再转成ImageTk.PhotoImage供Tkinter使用
  • 移除了错误的star_image和star_canvas,直接在主画布调用create_polygon绘制五角星
  • 添加root.background_photo = background_photo,防止Python垃圾回收机制回收图片对象导致图片不显示

内容的提问来源于stack exchange,提问作者asteia apo seires

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 04:15:28