在 tkinter 中播放视频播放列表时出现问题

问题描述 投票:0回答:1

我制作了一个程序,当视频与一个人所说的单词匹配时播放视频,如果匹配,视频会显示在 tkinter 标签中。我的问题是当它匹配多个单词时,因为该程序会播放所有视频立即匹配。这个想法是,一个视频播放、停止,然后播放下一个视频。我使用 tkinter 和 tkvideo 。希望你能帮我解决这个问题。

dir = 'C:\\Users\\Usuario\\Desktop\\Prototipo\\palabras'
listaVid = []
with os.scandir(dir) as ficheros:
     for fichero in ficheros:
            listaVid.append(fichero.name.replace('.mp4',''))


def audioTexto():
    listener = sr.Recognizer()
    with sr.Microphone(device_index=0) as source:
        print("Escuchando...")
        audio = listener.listen(source)
        rec = listener.recognize_whisper(audio, language="spanish")
        trans_tab = dict.fromkeys(map(ord, u'\u0301\u0308'), None)
        rec = normalize('NFKC', normalize('NFKD', rec).translate(trans_tab))
        rec = re.sub(r'[.]', '', rec)
        palabras = rec.split(',')
    try:
        for palabra in palabras:
            for vid in listaVid:
                if vid in palabra:
                    player = tkvideo.tkvideo('C:\\Users\\Usuario\\Desktop\\Reconocimiento de voz\\palabras\\'+vid+'.mp4', lblVid,loop=0, size = (640,360))
                    player.play()
                                     
    except sr.UnknownValueError:
        print("No se entiende")
    except sr.RequestError as e:
        print("error")

root =Tk()
btnHablar = Button(root,text='Hablar..',command= audioTexto)
btnHablar.grid(column=0, row=0 , padx=5 ,pady=5)
lblVid = Label(root)
lblVid.grid(column=0,row=2,columnspan=2)
root.mainloop()

python tkinter
1个回答
0
投票

下面将立即播放每个匹配视频的视频。只需将

play
从循环中移除即可。

for palabra in palabras:
    for vid in listaVid:
        if vid in palabra:
            player = tkvideo.tkvideo('C:\\Users\\Usuario\\Desktop\\Reconocimiento de voz\\palabras\\'+vid+'.mp4', lblVid, loop=0, size = (640,360))
            player.play()

做这样的事情:

VIDEO_PATH = 'C:\\Users\\Usuario\\Desktop\\Reconocimiento de voz\\palabras\\{}.mp4'

queue = [VIDEO_PATH.format(vid) for palabra in palabras for vid in listaVid if vid in palabra]
video = queue[0] # or queue.pop(0)
player = tkvideo.tkvideo(video, lblVid, loop=0, size = (640,360))
player.play()
© www.soinside.com 2019 - 2024. All rights reserved.