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

Windows启动文件夹中Python脚本调用PIL/Tkinter异常问题

解决Windows开机启动Pyw脚本无法加载图片的问题

核心问题就是开机启动时当前工作目录不是脚本所在的启动文件夹,而是C:/WINDOWS/System32,导致相对路径找不到图片。你之前改图片加载方式没用,因为本质还是用了相对路径,得改成基于脚本自身位置的绝对路径才能解决。

直接上可行的解决方案:

方法1:用os模块拼接绝对路径

import os
import tkinter as tk
from PIL import Image, ImageTk

# 获取脚本所在的绝对目录
script_dir = os.path.dirname(os.path.abspath(__file__))
# 拼接图片的绝对路径
image_path = os.path.join(script_dir, "Image.png")

# 初始化全屏置顶窗口
root = tk.Tk()
root.attributes("-fullscreen", True)
root.attributes("-topmost", True)

# 加载并显示图片
img = ImageTk.PhotoImage(Image.open(image_path))
label = tk.Label(root, image=img)
label.pack()

# 保留图片引用,避免被垃圾回收销毁
label.image = img

root.mainloop()

方法2:用pathlib(Python3.4+更简洁)

from pathlib import Path
import tkinter as tk
from PIL import Image, ImageTk

# 获取脚本所在目录的绝对路径
script_dir = Path(__file__).parent.resolve()
# 拼接图片路径
image_path = script_dir / "Image.png"

root = tk.Tk()
root.attributes("-fullscreen", True)
root.attributes("-topmost", True)

img = ImageTk.PhotoImage(Image.open(image_path))
label = tk.Label(root, image=img)
label.pack()
label.image = img

root.mainloop()

关键说明:

  • __file__会返回当前pyw脚本的完整绝对路径,不管当前工作目录是什么,都能准确定位到脚本位置。
  • 必须用os.path.abspath()或resolve()确保路径是绝对的,避免符号链接、相对层级等问题。
  • 必须保留图片对象的引用(比如label.image = img),否则Tkinter的垃圾回收机制会销毁图片对象,导致窗口显示空白。

至于开机时触发Windows图片查看器的原因,大概率是脚本因找不到图片抛出异常后,Tk窗口的初始化逻辑未执行,系统误将错误路径关联到了默认图片打开程序,解决路径问题后该现象会自然消失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 13:15:41