在 tkinter 中延迟显示多个图像
Displaying Multiple image in tkinter with delay
我想一次显示一张图片这是我为两张图片编写的代码。但它不能像我想的那样工作。我希望在第一个广告完全完成后需要 10 秒的延迟,然后 运行 第二个广告。
def ad():
global pop
pop=Toplevel(root)
pop.geometry('1600x900')
global pic
pic=PhotoImage(file='ad.png')
label_pop = Label(pop, image=pic)
label_pop.grid()
pop.overrideredirect(1)
pop.after(5000, lambda: pop.destroy())
#ad 2
global pop2
pop2=Toplevel(root)
pop2.geometry('1600x900')
global pic2
pic2=PhotoImage(file='j..png')
label_pop2 = Label(pop2, image=pic2)
label_pop2.grid()
pop2.overrideredirect(1)
pop2.after(5000, lambda: pop2.destroy())
root.after(15000, ad)
root.after(5000,ad)
- 您需要为每个图像使用不同的文件名。
- 您可以使用时间模块,特别是
time.delay()
延迟。
使用 itertools.cycle()
创建要显示的图像的循环列表,然后您可以使用 next()
获得 下一张图像 。
下面是一个例子:
...
from itertools import cycle
...
# a cycle list of images you want to show
imagelist = cycle(['ad1.png', 'ad2.png', ...])
def ad():
pop = Toplevel(root)
pop.geometry('1600x900')
pop.overrideredirect(1)
pic = PhotoImage(file=next(imagelist)) # get next image using next()
label_pop = Label(pop, image=pic)
label_pop.grid()
label_pop.image = pic # save reference of image to avoid garbage collection
root.after(5000, pop.destroy)
root.after(15000, ad)
root.after(5000, ad)
...
我想一次显示一张图片这是我为两张图片编写的代码。但它不能像我想的那样工作。我希望在第一个广告完全完成后需要 10 秒的延迟,然后 运行 第二个广告。
def ad():
global pop
pop=Toplevel(root)
pop.geometry('1600x900')
global pic
pic=PhotoImage(file='ad.png')
label_pop = Label(pop, image=pic)
label_pop.grid()
pop.overrideredirect(1)
pop.after(5000, lambda: pop.destroy())
#ad 2
global pop2
pop2=Toplevel(root)
pop2.geometry('1600x900')
global pic2
pic2=PhotoImage(file='j..png')
label_pop2 = Label(pop2, image=pic2)
label_pop2.grid()
pop2.overrideredirect(1)
pop2.after(5000, lambda: pop2.destroy())
root.after(15000, ad)
root.after(5000,ad)
- 您需要为每个图像使用不同的文件名。
- 您可以使用时间模块,特别是
time.delay()
延迟。
使用 itertools.cycle()
创建要显示的图像的循环列表,然后您可以使用 next()
获得 下一张图像 。
下面是一个例子:
...
from itertools import cycle
...
# a cycle list of images you want to show
imagelist = cycle(['ad1.png', 'ad2.png', ...])
def ad():
pop = Toplevel(root)
pop.geometry('1600x900')
pop.overrideredirect(1)
pic = PhotoImage(file=next(imagelist)) # get next image using next()
label_pop = Label(pop, image=pic)
label_pop.grid()
label_pop.image = pic # save reference of image to avoid garbage collection
root.after(5000, pop.destroy)
root.after(15000, ad)
root.after(5000, ad)
...