树莓派pi3 b +幻灯片程序不起作用

时间:2019-03-09 14:27:35

标签: python-3.x raspberry-pi3

我想将树莓派变成幻灯片设备,但我几乎不了解python 3,有人能帮我解决我在网上找到的这段代码吗?它应该显示我创建的列表中的图像,但它不会运行。我对此代码所做的唯一更改是列表的创建,因此我不知道为什么它不起作用。我收到的错误是

Traceback (most recent call last):
  File "bro.py", line 82, in <module>
    slideshow.start()
  File "bro.py", line 56, in start
    self.main()
  File "bro.py", line 48, in main
    self.set_image()
  File "bro.py", line 42, in set_image
    self.image_name = next(self.images)
StopIteration

这是代码:

#!/usr/bin/env python3
"""Display a slideshow from a list of filenames"""

import os
import tkinter

from itertools import cycle
from PIL import Image, ImageTk


class Slideshow(tkinter.Tk):
    """Display a slideshow from a list of filenames"""
    def __init__(self, images, slide_interval):
        """Initialize

        images = a list of filename 
        slide_interval = milliseconds to display image
        """
        tkinter.Tk.__init__(self)
        self.geometry("+0+0")
        self.slide_interval = slide_interval
        self.images = images
        self.set_images(images)
        self.slide = tkinter.Label(self)
        self.slide.pack()

    def set_images(self, images):
         self.images = cycle(images)

    def center(self):
        """Center the slide window on the screen"""
        self.update_idletasks()
        w = self.winfo_screenwidth()
        h = self.winfo_screenheight()
        size = tuple(int(_) for _ in self.geometry().split('+')[0].split('x'))
        x = w / 2 - size[0] / 2
        y = h / 2 - size[1] / 2
        self.geometry("+%d+%d" % (x, y))

    def set_image(self):
        """Setup image to be displayed"""
        self.image_name = next(self.images)
        filename, ext = os.path.splitext(self.image_name)
        self.image = ImageTk.PhotoImage(Image.open(self.image_name))

    def main(self):
        """Display the images"""
        self.set_image()
        self.slide.config(image=self.image)
        self.title(self.image_name)
        self.center()
        self.after(self.slide_interval, self.start)

    def start(self):
        """Start method"""
        self.main()
        self.mainloop()


if __name__ == "__main__":
    slide_interval = 2500

    # use a list
    images = [
              "/~/definitely/1550099164562.png",
              "/~/definitely/1550770995551.png",
              "/~/definitely/1550771217013.png",
              "/~/definitely/1550771726391.jpg"]

    # all the specified file types in a directory 
    # "." us the directory the script is in.
    # exts is the file extentions to use.  it can be any extention that pillow supports
    # http://pillow.readthedocs.io/en/3.3.x/handbook/image-file-formats.html
    import glob
    images = glob.glob("*.jpg")
    path = "."
    exts = ["jpg", "bmp", "png", "gif", "jpeg"]
    images = [fn for fn in os.listdir(path) if any(fn.endswith(ext) for ext in exts)]

    # start the slideshow
    slideshow = Slideshow(images, slide_interval)
    slideshow.start()

1 个答案:

答案 0 :(得分:0)

尝试使用next(iter(images))代替next(images)

顺便说一句,我在tachyonlabs GitHub上同时有Tkinter和Kivy的Raspberry Pi幻灯片放映...他们也从Instagram下载照片,但是如果您不挂了它或者没有互联网连接,它们将循环浏览图像在您指定的图像目录中,以及您选择的顺序和持续时间。