猿问

如何使用图像序列在 tkinter 上显示视频

我正在尝试构建一个将图像序列显示为视频的 GUI。图像是 numpy 数组。


当我尝试一次显示一张图像时,代码可以正常工作,但当我尝试将它们作为序列运行时,代码会崩溃。


代码:


from tkinter import *

from scipy.io import loadmat

from PIL import ImageTk, Image

import time

data = loadmat('DepthFrames.mat')['DepthFrames'].squeeze(axis=0)

print(data.shape)

counter = 0

root = Tk()

image = ImageTk.PhotoImage(image = Image.fromarray(data[counter]))

root.title("WUDU VIDEOS LABEL TOOL")

myLabel = Label(root, image = image)

myLabel.grid(row = 0)

def changeImg():

    global counter

    counter +=1

    print(counter)

    image = ImageTk.PhotoImage(image = Image.fromarray(data[counter]))

    myLabel.configure(image = image)

    myLabel.image = image


def playVideo():

    for i in range(10):

        image = ImageTk.PhotoImage(image = Image.fromarray(data[i]))

        myLabel.configure(image = image)

        myLabel.image = image

        time.sleep(0.03333)

my_Button = Button(text = "Play video",command = playVideo)

my_Button.grid(row = 1)

root.mainloop()


哈士奇WWW
浏览 149回答 1
1回答

梵蒂冈之花

time.sleep阻塞 的主线程tkinter。您的代码将冻结 GUI,直到for循环完成并且图像将显示为最后一个图像。你需要使用该after方法。像这样的东西:def playVideo(frame=0):    try:        image = ImageTk.PhotoImage(image = Image.fromarray(data[frame]))    except IndexError:        return    myLabel.configure(image = image)    myLabel.image = image    root.after(33, playVideo, frame+1)
随时随地看视频慕课网APP

相关分类

Python
我要回答