我正在尝试进行幻灯片放映,并将所有图像路径存储在1个文本文件中,以使主代码更清晰一些, 这是主要代码:
import tkinter as tk
from itertools import cycle
from PIL import ImageTk, Image
images = open('list.txt', 'r').read()
print(images)
photos = cycle(ImageTk.PhotoImage(Image.open(image)) for image in images)
def slideShow():
img = next(photos)
displayCanvas.config(image=img)
root.after(1200, slideShow)
root = tk.Tk()
root.overrideredirect(True)
width = root.winfo_screenwidth()
height = root.winfo_screenwidth()
root.geometry('%dx%d' % (1600, 900))
displayCanvas = tk.Label(root)
displayCanvas.pack()
root.after(1000, lambda: slideShow())
root.mainloop()
这是列表文件的下载文件,以防万一需要重新格式化或进行以下操作:https://drive.google.com/open?id=17PzCCf6DK9L-8q4ZxVe7bPD1kFlIuZts
当我尝试运行代码时,我当前收到此错误
FileNotFoundError: [Errno 2] No such file or directory: '['
我尝试过用不同的方式格式化它,但第一个字符是什么,然后“没有这样的文件或目录”,一切都没有效果
答案 0 :(得分:1)
只需更换
images = open('list.txt', 'r').read()
print(images)
使用
images =[]
with open('list.txt', 'r') as f:
lines = f.read().strip('[]')
images = [i.strip("\" ") for i in lines.split(',')]
您的文本文件格式不同。我要做的就是剥离[]
的文本文件,然后用,
分隔符将它们分割,然后删除尾随的空格和"
。
希望对您有所帮助:)
答案 1 :(得分:0)
您要在文件上调用.read()
,该文件会将所有内容加载到字符串中。
然后,您逐个字符地遍历字符串,尝试将字符作为图像打开
如果每行都有名字,那么就需要这个
with open('list.txt', 'r') as f:
images = f.readlines()
print(images)
photos = cycle(ImageTk.PhotoImage(Image.open(image.rstrip())) for image in images)
如果文件的格式有所不同,则需要首先将其解析为图像文件名列表
答案 2 :(得分:0)
open('list.txt', 'r').read()
这会将 entire 文件读取为单个字符串,而无需注意该字符串的实际外观。
cycle(ImageTk.PhotoImage(Image.open(image)) for image in images)
这尝试使用images
的每个元素进行Image.open
调用。由于images
是单个字符串(由上一行生成),因此其元素是该字符串的单个字符(以1个字符的字符串表示)。因此,'['
是第一个。
似乎您希望将列表的字符串表示形式写入文件,然后通过读取文件自动获得实际对应的列表。这是行不通的。您需要实际解释文件内容才能构建列表。
答案 3 :(得分:0)
您偶然创建了JSON
文件,可以使用模块json
将其转换回Python的列表
import json
images = json.loads(open('list.txt').read())
print(images[0])
答案 4 :(得分:0)
import json
with open('../resources/list.txt') as list_file:
list_res = json.load(list_file)
from ast import literal_eval
with open('../resources/list.txt') as list_file:
list_res = literal_eval(list_file.read())