废话不多说,直接上代码。
一、界面部分
from tkinter import *
from tkinter import filedialog,messagebox
import time
import cv2
import threading
__app__ = "视频转图片"
class Sche:
def __init__(self):
self.window = Tk()
self.window.title(__app__)
self.v = IntVar()#与v1一起形成图片转换间隔
self.v1 = IntVar()
self.v2 = StringVar()#控件名改变
self.v3 = StringVar()#控件名改变
self.player = 0#播放控制/转换控制,0为未载入视频,1为播放,2为暂停
self.rec = 0#转换起始点和结束点记录标志,0为不记录,1为记录
self.speed = 1#播放速率控制,共分1/16,1/8,1/4,1/2,1,2,4,6,8, 9档速度(实际可能偏快或偏慢,未进行速度校准)
self.type = ".jpg"#转换类型控制
self.bujin = 0#播放布进值控制,0为不步进,有15,-15两档,其余值为跳跃值
self.v.set(1)#v,v1初值设置,不可为0
self.v1.set(5)
width = int((self.window.winfo_screenwidth() - 1000)/2)#居中设置
height = int((self.window.winfo_screenheight() + 60)/2)#居中设置
#菜单控件设置
menu = Menu(self.window)
filemenu = Menu(menu, tearoff=0)
menu.add_cascade(label="文件", menu=filemenu)
filemenu.add_command(label="载入", command=self.open)
filemenu.add_command(label="导出", command=self.save)
filemenu.add_separator()
filemenu.add_command(label="退出", command=self.fast)
self.window.config(menu=menu)
self.window.geometry("1000x60+{}+{}".format(width, height))#窗口大小位置设置
self.canvas = Canvas(self.window, bg="white")#画布设置
self.canvas.place(x=180, y=5, width=810, height=50)#画布放置必须与画布控件分开,否则会出现错误
#功能键设定
self.sub = Button(self.window, text="快退", command=self.rew).place(x=5, y=25, width=35, height=30)
self.sub1 = Button(self.window, text="减速", command=self.slow_down).place(x=40, y=25, width=35, height=30)
self.v2.set("开始")
self.begin = Button(self.window, textvariable=self.v2, command=self.beginer).place(x=75, y=5, width=35, height=20)
self.v3.set("播放")
self.opened = Button(self.window, textvariable=self.v3, command=self.play).place(x=75, y=25, width=35, height=30)
self.add = Button(self.window, text="加速", command=self.quick).place(x=110, y=