从幻灯片显示输出文件列表

时间:2016-10-07 01:37:20

标签: python for-loop pyglet

我已经改编了一个python脚本来显示图像的幻灯片。可以在https://github.com/cgoldberg/py-slideshow

找到原始脚本

我希望能够记录显示的每个图像的文件名,以便我可以更轻松地调试任何错误(即删除不兼容的图像)。

我试图包含一个命令,将文件名写入def get_image_paths函数中的文本文件。但是,这没有奏效。我的代码显示在下方 - 感谢任何帮助。

import pyglet
import os
import random
import argparse

window = pyglet.window.Window(fullscreen=True)

def get_scale(window, image):
    if image.width > image.height:
        scale = float(window.width) / image.width
    else:
        scale = float(window.height) / image.height
    return scale


def update_image(dt):
    img = pyglet.image.load(random.choice(image_paths))
    sprite.image = img
    sprite.scale = get_scale(window, img)
    if img.height >= img.width:
        sprite.x = ((window.width / 2) - (sprite.width / 2))
        sprite.y = 0
    elif img.width >= img.height:
        sprite.y = ((window.height / 2) - (sprite.height / 2))
        sprite.x = 0
    else:
        sprite.x = 0
        sprite.y = 0
     window.clear()

thefile=open('test.txt','w')
def get_image_paths(input_dir='.'):
    paths = []
    for root, dirs, files in os.walk(input_dir, topdown=True):
        for file in sorted(files):
            if file.endswith(('jpg', 'png', 'gif')):
                path = os.path.abspath(os.path.join(root, file))
                paths.append(path)
            thefile.write(file)
    return paths


@window.event()
def on_draw():
   sprite.draw()


if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('dir', help='directory of images',
                        nargs='?', default=os.getcwd())
    args = parser.parse_args()
    image_paths = get_image_paths(args.dir)
    img = pyglet.image.load(random.choice(image_paths))
    sprite = pyglet.sprite.Sprite(img)
    pyglet.clock.schedule_interval(update_image, 3)
    pyglet.app.run()

2 个答案:

答案 0 :(得分:1)

系统不必立即写入文件,但可以将文本保存在缓冲区中并在关闭文件时保存。所以你可能需要关闭文件。

或者您可以在每thefile.flush()后使用thefile.write()一次将新文本从缓冲区发送到文件。

答案 1 :(得分:0)

我最终宣布将随机图像选择为一个变量,然后写入txt文件。带有更改的相关代码如下所示:

thefile=open('test.txt','w')

def update_image(dt):
pic = random.choice(image_paths)
img = pyglet.image.load(pic)
thefile.write(pic+'\n')
thefile.flush()
sprite.image = img
sprite.scale = get_scale(window, img)
if img.height >= img.width:
    sprite.x = ((window.width / 2) - (sprite.width / 2))
    sprite.y = 0
elif img.width >= img.height:
    sprite.y = ((window.height / 2) - (sprite.height / 2))
    sprite.x = 0
else:
    sprite.x = 0
    sprite.y = 0
window.clear()

感谢@furas指出我正确的方向有关日志文件和刷新缓冲区以确保捕获所有实例。