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

使用Tkinter显示图片时出现全屏空白窗口问题求助

使用Tkinter显示图片时出现全屏空白窗口问题求助

大家好,我运行下面这段代码的时候没有报错,但窗口是全白的,完全看不到图片。我本来是想让图片全屏显示出来的,而且已经检查过图片本身没有问题。有没有大佬知道这是怎么回事呀?

我的代码如下:

import tkinter as tk
from PIL import Image,ImageTk

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

window_width = root.winfo_width()
window_height = root.winfo_height()

image = Image.open(r"C:\Users\user\OneDrive\Desktop\Proggramers Club\screenshot.png")
resized_image = image.resize((window_width, window_height))
photo_image = ImageTk.PhotoImage(resized_image)

frame = tk.Frame(root)
frame.pack()

label = tk.Label(frame, image=photo_image)
label.pack()

root.mainloop()

问题原因&解决办法

我一眼就看出问题啦!你调用root.winfo_width()和root.winfo_height()的时机不对——在窗口还没完成渲染的时候,这两个方法拿到的不是全屏的真实尺寸,而是Tkinter窗口的默认最小尺寸(通常是1x1或者很小的数值),所以你把图片缩成了这么小的尺寸,放到窗口里自然就看不到了。

这里给你两个可行的解决办法:

方法一:先更新窗口再获取尺寸

在获取宽高之前,先调用root.update()让窗口完成渲染,这样就能拿到真实的全屏尺寸了。修改后的代码如下:

import tkinter as tk
from PIL import Image,ImageTk

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

# 先更新窗口,确保拿到真实的全屏尺寸
root.update()

window_width = root.winfo_width()
window_height = root.winfo_height()

image = Image.open(r"C:\Users\user\OneDrive\Desktop\Proggramers Club\screenshot.png")
resized_image = image.resize((window_width, window_height))
photo_image = ImageTk.PhotoImage(resized_image)

# 直接把Label放在root上,不用嵌套Frame,更简洁
label = tk.Label(root, image=photo_image)
label.pack(fill=tk.BOTH, expand=True)

# 保留对photo_image的引用,防止被垃圾回收机制回收
label.image = photo_image

root.mainloop()

方法二:绑定窗口配置事件动态调整图片

如果你担心后续窗口大小变化(比如退出全屏再进入)图片不能适配,可以绑定<Configure>事件,每次窗口尺寸变化时重新调整图片大小,这个方法更灵活:

import tkinter as tk
from PIL import Image,ImageTk

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

# 先加载原始图片
image = Image.open(r"C:\Users\user\OneDrive\Desktop\Proggramers Club\screenshot.png")
photo_image = None
label = tk.Label(root)
label.pack(fill=tk.BOTH, expand=True)

def resize_image(event):
    global photo_image
    # 获取当前窗口的真实尺寸
    window_width = event.width
    window_height = event.height
    # 调整图片尺寸
    resized_image = image.resize((window_width, window_height))
    photo_image = ImageTk.PhotoImage(resized_image)
    label.config(image=photo_image)
    label.image = photo_image

# 绑定窗口尺寸变化事件
root.bind('<Configure>', resize_image)

root.mainloop()

另外还有个小细节:一定要保留对photo_image的引用(比如赋值给label.image),不然Python的垃圾回收机制可能会把图片对象悄悄回收掉,导致窗口还是看不到图片哦!

备注:内容来源于stack exchange,提问作者crazynadge

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 11:28:18