如何使用python Tkinter迭代图像?
如何使用python Tkinter迭代图像如何使用python Tkinter迭代图像?,python,tkinter,Python,Tkinter,如何使用python Tkinter迭代图像 import tkinter as tk from PIL import ImageTk, Image win = tk.Tk() win.geometry('800x500') # set window size win.resizable(0, 0) # fix window images = ['01.jpg', '02.jpg', '03.jpg'] def next_img(): # show next image for
import tkinter as tk
from PIL import ImageTk, Image
win = tk.Tk()
win.geometry('800x500') # set window size
win.resizable(0, 0) # fix window
images = ['01.jpg', '02.jpg', '03.jpg']
def next_img():
# show next image
for img in images:
img = Image.open(img)
img = ImageTk.PhotoImage(img)
panel = tk.Label(win, image=img)
panel.pack()
btn = tk.Button(text='Next image', command=next_img)
btn.pack()
win.mainloop()
但是我的面板没有显示任何图像。我希望面板等待我,我点击按钮显示下一张图片。如何解决此问题。不幸的是,Tkinter有点让人困惑,当您将图像放置在标签或按钮中时,您需要将其添加到下面的行中
panel.photo=img
我不太清楚为什么会这样,但似乎有两个值用于显示图像。不幸的是,Tkinter有点混乱,当将图像放置在标签或按钮中时,您需要添加到下面的行中
panel.photo=img
我不太清楚为什么会这样,但似乎有两个值将图像显示出来。代码不显示任何图像的原因有点复杂。有两个因素共同作用:
img
变量的值,因此除最后一个图像外,所有图像都会被垃圾收集,不会显示要修复代码,请首先删除该循环。您不需要3个标签和3个按钮,也不需要在程序启动时立即加载所有3个图像 加载和显示图像的代码应移到
next\u img
功能中。您可以使用命令panel['image']=img
更新标签的图像
为了循环浏览图像列表,最简单的方法是使用迭代器。您可以通过调用images=iter(images)
将图像列表转换为一个。然后,您可以在需要时使用该函数从迭代器获取下一个图像
import tkinter as tk
from PIL import ImageTk, Image
win = tk.Tk()
win.geometry('800x500') # set window size
win.resizable(0, 0) # fix window
panel = tk.Label(win)
panel.pack()
images = ['01.jpg', '02.jpg', '03.jpg']
images = iter(images) # make an iterator
def next_img():
try:
img = next(images) # get the next image from the iterator
except StopIteration:
return # if there are no more images, do nothing
# load the image and display it
img = Image.open(img)
img = ImageTk.PhotoImage(img)
panel.img = img # keep a reference so it's not garbage collected
panel['image'] = img
btn = tk.Button(text='Next image', command=next_img)
btn.pack()
# show the first image
next_img()
win.mainloop()
此代码将在图像中循环一次,当到达最后一个图像时,按下“下一个图像”按钮将无效。如果要环绕第一个图像,可以创建一个无限循环迭代器:
images = itertools.cycle(images)
代码不显示任何图像的原因有点复杂。有两个因素共同作用:
img
变量的值,因此除最后一个图像外,所有图像都会被垃圾收集,不会显示要修复代码,请首先删除该循环。您不需要3个标签和3个按钮,也不需要在程序启动时立即加载所有3个图像 加载和显示图像的代码应移到
next\u img
功能中。您可以使用命令panel['image']=img
更新标签的图像
为了循环浏览图像列表,最简单的方法是使用迭代器。您可以通过调用images=iter(images)
将图像列表转换为一个。然后,您可以在需要时使用该函数从迭代器获取下一个图像
import tkinter as tk
from PIL import ImageTk, Image
win = tk.Tk()
win.geometry('800x500') # set window size
win.resizable(0, 0) # fix window
panel = tk.Label(win)
panel.pack()
images = ['01.jpg', '02.jpg', '03.jpg']
images = iter(images) # make an iterator
def next_img():
try:
img = next(images) # get the next image from the iterator
except StopIteration:
return # if there are no more images, do nothing
# load the image and display it
img = Image.open(img)
img = ImageTk.PhotoImage(img)
panel.img = img # keep a reference so it's not garbage collected
panel['image'] = img
btn = tk.Button(text='Next image', command=next_img)
btn.pack()
# show the first image
next_img()
win.mainloop()
此代码将在图像中循环一次,当到达最后一个图像时,按下“下一个图像”按钮将无效。如果要环绕第一个图像,可以创建一个无限循环迭代器:
images = itertools.cycle(images)
show next image
不是有效的Python代码。show next image
不是有效的Python代码。