如何使用 .after() 显示一个接一个的图像
How to display one image after another using .after()
我正在尝试根据短语向 window 显示图像。如果短语中的字符与图片名称匹配,则应显示在 window 上。如果词组中有多个字符,则当前字符后的字符相关图片应显示在当前字符图片的右侧。我怎样才能让它出现一个新的并排图片二重奏,这次显示与左边第二个字符和右边第三个字符相关的图片,依此类推?我尝试使用 .after() 但我不确定将它放在哪里。
此外,当我 运行 以下代码时,我得到一个索引超出范围的错误,除非我使用 break statement.but 我似乎无法弄清楚它是什么。也许使用 after() 方法可以解决这个问题?
import tkinter as tk
from PIL import ImageTk, Image, ImageDraw, ImageFont
import time
def open_image():
global i
global image
global img
global image2
global img2
if i < len(phrase):
if phrase[i] == " ":
image = Image.open("Rest.jpg")
img = ImageTk.PhotoImage(image)
panel['image'] = img
else:
image = Image.open(phrase[i] + ".jpg")
img = ImageTk.PhotoImage(image)
panel['image'] = img
if phrase[i + 1] != None and phrase[i + 1] != " ":
image2 = Image.open(phrase[i + 1] + ".jpg")
panel2['image2'] = img2
else:
image2 = Image.open("Rest1.jpg")
panel2['image2'] = img2
i += 1
window.after(2000, open_image)
else:
window.destroy()
# --- main ---
i = 0
phrase = " trac "
window = tk.Tk()
panel = tk.Label(window) # without image
panel.pack(side = "left", fill = "both", expand = "1", padx = 5, pady = 5)
panel2 = tk.Label(window)
panel2.pack(side = "left", fill = "both", expand = "1", padx = 5, pady = 5)
# use it after creating Label so it can set image
open_image()
window.mainloop()
我减少了代码来创建工作示例。
after()
使用没有 ()
的函数名
open_image()
加载图像,分配给全局变量(以解决 PhotoImage
中的错误问题)并更改 Label
中的图像
一开始我创建 Label
没有图像,然后 open_image()
添加第一张图像,然后将此图像更改为新图像。
import tkinter as tk
from PIL import Image, ImageTk
# --- functions ---
def open_image():
global i
global image
global img
if i < len(phrase): # check at the beginning to resolve problem with `IndexError: list index out of range`
image = Image.open(phrase[i] + ".jpg")
img = ImageTk.PhotoImage(image)
panel['image'] = img
i += 1
window.after(2000, open_image)
else:
#window.quit()
window.destroy()
# --- main ---
i = 0
phrase = " trac "
window = tk.Tk()
panel = tk.Label(window) # without image
panel.pack()
# use it after creating Label so it can set image in existing label
open_image()
window.mainloop()
我正在尝试根据短语向 window 显示图像。如果短语中的字符与图片名称匹配,则应显示在 window 上。如果词组中有多个字符,则当前字符后的字符相关图片应显示在当前字符图片的右侧。我怎样才能让它出现一个新的并排图片二重奏,这次显示与左边第二个字符和右边第三个字符相关的图片,依此类推?我尝试使用 .after() 但我不确定将它放在哪里。
此外,当我 运行 以下代码时,我得到一个索引超出范围的错误,除非我使用 break statement.but 我似乎无法弄清楚它是什么。也许使用 after() 方法可以解决这个问题?
import tkinter as tk
from PIL import ImageTk, Image, ImageDraw, ImageFont
import time
def open_image():
global i
global image
global img
global image2
global img2
if i < len(phrase):
if phrase[i] == " ":
image = Image.open("Rest.jpg")
img = ImageTk.PhotoImage(image)
panel['image'] = img
else:
image = Image.open(phrase[i] + ".jpg")
img = ImageTk.PhotoImage(image)
panel['image'] = img
if phrase[i + 1] != None and phrase[i + 1] != " ":
image2 = Image.open(phrase[i + 1] + ".jpg")
panel2['image2'] = img2
else:
image2 = Image.open("Rest1.jpg")
panel2['image2'] = img2
i += 1
window.after(2000, open_image)
else:
window.destroy()
# --- main ---
i = 0
phrase = " trac "
window = tk.Tk()
panel = tk.Label(window) # without image
panel.pack(side = "left", fill = "both", expand = "1", padx = 5, pady = 5)
panel2 = tk.Label(window)
panel2.pack(side = "left", fill = "both", expand = "1", padx = 5, pady = 5)
# use it after creating Label so it can set image
open_image()
window.mainloop()
我减少了代码来创建工作示例。
after()
使用没有 ()
open_image()
加载图像,分配给全局变量(以解决 PhotoImage
中的错误问题)并更改 Label
一开始我创建 Label
没有图像,然后 open_image()
添加第一张图像,然后将此图像更改为新图像。
import tkinter as tk
from PIL import Image, ImageTk
# --- functions ---
def open_image():
global i
global image
global img
if i < len(phrase): # check at the beginning to resolve problem with `IndexError: list index out of range`
image = Image.open(phrase[i] + ".jpg")
img = ImageTk.PhotoImage(image)
panel['image'] = img
i += 1
window.after(2000, open_image)
else:
#window.quit()
window.destroy()
# --- main ---
i = 0
phrase = " trac "
window = tk.Tk()
panel = tk.Label(window) # without image
panel.pack()
# use it after creating Label so it can set image in existing label
open_image()
window.mainloop()