Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python tkinter中的随机图像循环_Python_Tkinter - Fatal编程技术网

Python tkinter中的随机图像循环

Python tkinter中的随机图像循环,python,tkinter,Python,Tkinter,我正在尝试循环文件夹中的随机图像。到目前为止,我可以循环图像,但每次我尝试使用random.choice时,都会出现错误。下面是我没有随机导入的代码 import tkinter as tk import glob root = tk.Tk() from PIL import ImageTk, Image root.geometry('600x600') pics = glob.glob("./imgs/*.png") photos = [random.choice(tk

我正在尝试循环文件夹中的随机图像。到目前为止,我可以循环图像,但每次我尝试使用random.choice时,都会出现错误。下面是我没有随机导入的代码

import tkinter as tk
import glob
root = tk.Tk()
from PIL import ImageTk, Image

root.geometry('600x600')

pics = glob.glob("./imgs/*.png")
photos = [random.choice(tk.PhotoImage(file=x)) for x in pics]
label = tk.Label(root)
label.photos = photos
label.counter = 0
def changeimage():
    label['image'] = label.photos[label.counter%len(label.photos)]
    label.after(8000, changeimage)
    label.counter += 1
label.pack(padx=10, pady=10)
changeimage()
root.mainloop()
错误

回溯(最近一次呼叫最后一次):
文件“/Users/ad/Documents/Python/Project\u tkinter/test1.py”,第148行,在
照片=[随机选择(tk.PhotoImage(file=x))用于图片中的x]
文件“/Users/ad/Documents/Python/Project\u tkinter/test1.py”,第148行,在
照片=[随机选择(tk.PhotoImage(file=x))用于图片中的x]
文件“/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/random.py”,选择第288行
i=自身.(列(序号))
TypeError:“PhotoImage”类型的对象没有len()

您必须首先创建照片列表,然后选择单张照片

list_of_photos = [tk.PhotoImage(file=x) for x in pics]
single_photo = random.choice(list_of_photos)
但是,如果要循环此列表,则需要
random.shuffle()
更改列表上的顺序,使文件以随机顺序排列

list_of_photos = [tk.PhotoImage(file=x) for x in pics]
random.shuffle(list_of_photos)

random.shuffle()
更改原始列表,但不返回新列表。

如果您能提供回溯,将对我们有所帮助。嘿,不确定回溯是什么意思。我已经更新了代码,这样你就可以自己运行了。只需将文件夹路径替换为您自己的路径。您说您遇到了错误,这是什么意思?始终将完整的错误消息(从单词“Traceback”开始)作为文本(而不是屏幕截图)放在问题中(不是注释)。还有其他有用的信息。我在代码中没有看到
random.choice
。显示产生问题的代码。啊!非常感谢。你说的有道理。在我的另一个项目中,我对字符串列表使用了random.choice,它成功了。我想这对文件夹中的图像也是一样的。谢谢你的澄清。学到了一些新东西:)
list_of_photos = [tk.PhotoImage(file=x) for x in pics]
random.shuffle(list_of_photos)