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

Python Tkinter Hangman项目跨平台读取图片的方法问询

实现方案

第一步:统一项目目录结构

先固定项目目录结构,所有用户拿到的结构完全一致就不会出现路径匹配错误,参考结构:

  • 项目根目录(可自定义命名,比如hangman_project)
    • 主程序脚本(比如main.py)
    • assets 素材目录
      • hangman 吊死鬼图片专属目录
        • 1.png
        • 2.png
        • ... 其他吊死鬼阶段图片

第二步:基于脚本路径动态生成绝对路径

不要依赖当前运行的工作目录,直接以你执行的脚本文件所在路径为基准拼接图片路径,不管项目放在哪个盘符、哪个层级的文件夹都能正确识别。

方案1:原生Tkinter实现(仅支持png/gif格式,无需额外依赖)

Tkinter自带的PhotoImage不支持jpg格式,这也是你之前代码运行失败的核心原因之一,先把图片转成png格式后用如下代码加载:

import tkinter
from pathlib import Path

# 获取当前脚本所在目录的绝对路径作为基准路径
BASE_DIR = Path(__file__).resolve().parent
# 拼接图片的完整路径
img_path = BASE_DIR / "assets" / "hangman" / "1.png"

# 加载图片
hangman_img = tkinter.PhotoImage(file=str(img_path))

# *注意:必须把图片对象绑定到组件或者全局变量,避免被Python垃圾回收导致图片不显示*
# 示例:将图片放到Label组件中
display_label = tkinter.Label(root, image=hangman_img)
display_label.img = hangman_img # 绑定到组件属性防止回收
display_label.pack()

方案2:Pillow扩展实现(支持jpg/png等所有常见图片格式)

如果不想转换原有jpg图片格式,可以安装Pillow库处理图片:

  1. 先安装依赖:pip install pillow
  2. 加载代码示例:
import tkinter
from pathlib import Path
from PIL import Image, ImageTk

BASE_DIR = Path(__file__).resolve().parent
img_path = BASE_DIR / "assets" / "hangman" / "1.jpg"

# 加载并转换为Tkinter可用的图片对象
pil_img = Image.open(str(img_path))
hangman_img = ImageTk.PhotoImage(pil_img)

# 同样需要绑定防止垃圾回收
display_label = tkinter.Label(root, image=hangman_img)
display_label.img = hangman_img
display_label.pack()

适配说明

只要所有用户拿到的项目目录结构和你本地的结构完全一致,不管项目放在C盘、E盘还是U盘的任意目录下,上述代码都能自动定位到图片路径,不需要任何手动修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 09:15:03