【问题标题】:Is there a way to implement a time delay on a single image?有没有办法在单个图像上实现时间延迟?
【发布时间】:2019-06-23 18:17:34
【问题描述】:

我正在使用 python 编写的一个小程序旨在以特定顺序显示一系列图像和音频剪辑。我可以在同一个窗口中显示两个图像,一个按预期覆盖另一个,但我正在寻找一种方法让第二个图像在一定时间(30 秒)后出现,而不是尽快出现当程序运行时。不过,我似乎无法让名为 textBox.jpg 的第二张图片与程序的其余部分分开运行。

为了尝试解决这个问题,我输入了sleep() 函数,但这只是延迟了整个代码的启动。

from tkinter import *
from tkinter import ttk
from PIL import Image, ImageTk
import time

# Title/Main
window = Tk()
window.title("Just Monika")
window.configure(background="black")

# control window size to make full-screen
width_value=window.winfo_screenwidth()
height_value=window.winfo_screenheight()
window.geometry("%dx%d+0+0" % (width_value, height_value))

# Monika photo
# this block will allow the image to resize to fit the window's size
# indefinitely
def resize_image(event):
    new_width = event.width
    new_height = event.height
    image = copy_of_image.resize((new_width, new_height))
    photo = ImageTk.PhotoImage(image)
    label.config(image = photo)
    label.image = photo #avoid garbage collection

monika = Image.open("C:\\Python Programs\\Just Monika\\Images\\justMonika.png")
copy_of_image = monika.copy()
photo = ImageTk.PhotoImage(monika)
label = ttk.Label(window, image = photo)
label.bind('<Configure>', resize_image)
label.pack(fill=BOTH, expand=YES)

# text box image
textBox = Image.open("C:\\Python Programs\\Just Monika\\Images\\textBox.jpg")
tkTextBox = ImageTk.PhotoImage(textBox)
panel1 = Label(window, image = tkTextBox)
panel1.place(x=675, y=300)
time.sleep(30)

我希望在程序运行大约 30 秒并且另一张图像已经显示后调用第二张图像 textBox.jpg。

【问题讨论】:

标签: python tkinter time


【解决方案1】:

正如@Masoud 建议的那样,您可以使用通用小部件after() 方法来安排在指定时间延迟后调用的函数:

from tkinter import *
from tkinter import ttk
from PIL import Image, ImageTk


PATH_IMAGE1 = 'justMonika.png'
PATH_IMAGE2 = 'textBox.png'
DELAY = 5000  # In milliseconds

# Title/Main
window = Tk()
window.title("Just Monika")
window.configure(background="black")

# control window size to make full-screen
width_value=window.winfo_screenwidth()
height_value=window.winfo_screenheight()
window.geometry("%dx%d+0+0" % (width_value, height_value))


# Monika photo
# this block will allow the image to resize to fit the window's size
# indefinitely
def resize_image(event):
    new_width = event.width
    new_height = event.height
    image = copy_of_image.resize((new_width, new_height))
    photo = ImageTk.PhotoImage(image)
    label.config(image = photo)
    label.image = photo #avoid garbage collection

def display_2nd_image():
    global panel1

    # text box image
    textBox = Image.open(PATH_IMAGE2)
    tkTextBox = ImageTk.PhotoImage(textBox)
    panel1 = Label(window, image=tkTextBox)
    panel1.place(x=675, y=300)
    panel1.image = tkTextBox #avoid garbage collection

monika = Image.open(PATH_IMAGE1)
copy_of_image = monika.copy()
photo = ImageTk.PhotoImage(monika)
label = ttk.Label(window, image=photo)
label.bind('<Configure>', resize_image)
label.pack(fill=BOTH, expand=YES)

window.after(DELAY, display_2nd_image)
window.mainloop()

【讨论】:

    猜你喜欢
    • 2020-05-29
    • 1970-01-01
    • 2021-09-11
    • 2016-11-13
    • 2016-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多