问题描述
我有一个带有下拉框的窗口,其中列出了许多视频。我正在尝试为选定的帧范围播放选定的视频。我无法让它工作。它只播放第 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 (将#修改为@)