我已经改编了一个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()
答案 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指出我正确的方向有关日志文件和刷新缓冲区以确保捕获所有实例。