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

Tkinter幻灯片程序在Linux显示空白,Windows下正常求助

解决Tkinter幻灯片程序在Ubuntu下显示空白的问题

针对Windows正常运行、Ubuntu下仅显示空白画布的问题,可从以下几个方向排查修复:

1. 修复文件路径格式问题

Linux系统使用**正斜杠/**作为路径分隔符,你代码中使用的Windows风格反斜杠\会导致路径解析错误,同时raw字符串写法在Linux下不适用。

修改路径代码:

# 原代码
playlist = glob.glob(r'\mnt\hgfs\E\Images\*.*')
# 修改为
playlist = glob.glob('/mnt/hgfs/E/Images/*')

注:*已匹配所有文件,无需*.*,Linux下文件不一定带后缀名

2. 替换已弃用的PIL缩放参数

新版本Pillow(PIL的分支)中Image.ANTIALIAS已被弃用,Ubuntu通常安装的是较新版本Pillow,会导致图片缩放失败。

修改resize方法参数:

# 先新增Resampling导入
from PIL import Image, ImageTk, Resampling

# 原代码
resized = original_image.resize((self.w, self.h), Image.ANTIALIAS)
# 修改为
resized = original_image.resize((self.w, self.h), Resampling.LANCZOS)

# 若使用旧版本Pillow,可替换为
resized = original_image.resize((self.w, self.h), Image.LANCZOS)

3. 检查并修复目录/文件权限

Ubuntu下需确保当前用户对/mnt/hgfs/E/Images目录及图片有读取权限:

  • 查看权限:执行ls -l /mnt/hgfs/E/Images
  • 调整权限:若权限不足,执行sudo chmod -R 755 /mnt/hgfs/E/Images

4. 替换全屏模式实现(兼容性修复)

overrideredirect(1)在部分Linux窗口管理器下存在兼容性问题,导致界面渲染异常,可改用Tkinter原生全屏属性:

# 原代码
self.overrideredirect(1)
self.geometry("%dx%d+0+0" % (self.w, self.h))
# 修改为
self.attributes('-fullscreen', True)

5. 安装Pillow依赖库

Ubuntu下Pillow对JPEG、PNG等格式的支持需要系统级依赖,缺失会导致图片无法加载:
执行以下命令安装依赖:

sudo apt update
sudo apt install python3-pil.imagetk libjpeg-turbo8-dev libpng-dev

完整修复后的代码示例

from PIL import Image, ImageTk, Resampling
import tkinter as tk
import os
import glob
import random

class App(tk.Tk):
    def __init__(self, image_files, delay):
        tk.Tk.__init__(self)
        self.w = self.winfo_screenwidth()
        self.h = self.winfo_screenheight()
        self.attributes('-fullscreen', True)  # 替换全屏实现
        self.delay = delay
        self.pictures = image_files  # 简化列表赋值
        self.track_img_index = 0  # 修正原变量名拼写错误
        self.picture_display = tk.Label(self)
        self.picture_display.pack(expand=True, fill="both")

    def show_slides(self):
        if self.track_img_index < len(self.pictures):
            x = self.pictures[self.track_img_index]
            self.track_img_index +=1
            try:
                original_image = Image.open(x)
                resized = original_image.resize((self.w, self.h), Resampling.LANCZOS)
                new_img = ImageTk.PhotoImage(resized)
                self.picture_display.config(image=new_img)
                self.picture_display.image = new_img
                self.title(os.path.basename(x))
            except Exception as e:
                print(f"加载图片失败 {x}: {str(e)}")  # 新增错误提示
            self.after(self.delay, self.show_slides)
        else:
            print("End of list!")

delay = 5000
playlist = glob.glob('/mnt/hgfs/E/Images/*')  # 修正路径
random.shuffle(playlist)
image_files = playlist

app = App(image_files, delay)
app.show_slides()
app.mainloop()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 00:40:43