2016-10-07 38 views
0

我已經改編了一個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

最好使用'logging'模塊寫入日誌文件。 – furas

+0

也許你必須關閉文件。 – furas

+0

'sprite'永遠不會在'update_image'中聲明 - 這是一個編程錯誤還是你剝離代碼的結果? – Torxed

回答

1

系統不必一次寫入文件,但它可以保持文本在緩衝區中並保存在關閉文件時。所以可能你必須關閉文件。

或者您可以在每之後使用thefile.flush()一次將新文本從緩衝區發送到文件。

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指着我在正確的方向有關的日誌文件,並刷新該緩衝區,以一定的捕捉到所有實例。