微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从下拉框中选择时尝试播放具有特定帧数的视频

如何解决从下拉框中选择时尝试播放具有特定帧数的视频

我有一个带有下拉框的窗口,其中列出了许多视频。我正在尝试为选定的帧范围播放选定的视频。我无法让它工作。它只播放第 9 行中指定的视频,但从下拉列表中选择时不播放。

使用线程逐帧播放。

这是代码

import tkinter as tk
from tkinter import ttk
from tkinter.messageBox import showinfo
import threading
import imageio
from PIL import Image,ImageTk


video_name = "/Users/SamKohli/Downloads/angle2.mp4" #This is your video file path
video = imageio.get_reader(video_name)

root= tk.Tk()

canvas1 = tk.Canvas(root,width = 500,height = 400)
canvas1.pack()

# create entry Box and LABELS
entry1 = tk.Entry (root) 
entry2 = tk.Entry (root)
canvas1.create_window(100,140,window=entry1)
canvas1.create_window(300,window=entry2)
label1 = tk.Label(root,text= 'Frame From',fg="green",bg="white")
canvas1.create_window(100,100,window=label1)
label2 = tk.Label(root,text= 'Frame To',bg="white")
canvas1.create_window(300,window=label2)

# create dropdown Box
def video_changed(event):
    msg = f'You selected {video_cb.get()}!'
    showinfo(title='Result',message=msg)
    video_name = video_cb.get()
    showNumber()
    
video_angels = ('/Users/SamKohli/Downloads/angle1.mp4','/Users/SamKohli/Downloads/angle2.mp4' )
selected_video = tk.StringVar()
video_cb = ttk.ComboBox(root,textvariable=selected_video)
video_cb['values'] = video_angels
canvas1.create_window(100,50,window=video_cb)
video_cb.bind('<<ComboBoxSelected>>',video_changed)



#

def stream(label,x1,x2):

    frame = int(x1)
    for image in video.iter_data():
        frame = frame + 1                                  #counter to save new frame number
        image_frame = Image.fromarray(image)          
        frame_image = ImageTk.PhotoImage(image_frame)
        label.config(image=frame_image)
        label.image = frame_image
        if frame == int(x2): break


           
def showNumber ():  
    x1 = entry1.get()
    x2 = entry2.get() 

    if __name__ == "__main__":
           my_label = tk.Label(root)
           my_label.pack()
           showinfo(title='Sam wants to kNow',message='Play button clicked')
           video_name = video_cb.get()
           video = imageio.get_reader(video_name)
           showinfo(title='ShowNumber',message=video_name) 
           thread = threading.Thread(target=stream,args=(my_label,x2))
           thread.daemon = 1
           thread.start()
              
           
button1 = tk.Button(text='Play Video',command=showNumber,height = '3',width='20')
#button2 = tk.Button(text='Play Video',command=stream)
canvas1.create_window(58,200,window=button1)
#canvas1.create_window(300,180,window=button2)



root.mainloop()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。