我有一个用例,我需要绑定ttk进度栏,直到播放视频供稿为止。
我已经制作了一个需要容纳视频供稿的父容器和一个小部件(进度条)。我正在使用tk.Label.update()方法在容器中显示我的视频。
此外,我还有一个标志,用于计算显示的帧数。我将其上限设置为60点。此标志还用于设置进度条的变量。
我的视频正在显示,但进度条未显示。谁能帮我解决问题? `
import tkinter as tk
from tkinter import ttk
import time
import cv2
from PIL import Image, ImageTk
MAX = 60
root = tk.Tk()
screen_width,screen_height = root.winfo_screenwidth(),root.winfo_screenheight()
root.geometry('{}x{}'.format(screen_width, screen_height))
progress_var = tk.DoubleVar() #here you have ints but when calc. %'s usually floats
ImageLabel = tk.Label(root, width=screen_width,height=screen_height,)
ImageLabel.pack()
progressbar = ttk.Progressbar(root, variable=progress_var, maximum=MAX)
progressbar.pack(fill=tk.X, expand=1)
def loop_function():
k = 0
cap=cv2.VideoCapture("myvideo.avi")
while k <= MAX:
val,frame=cap.read()
if val:
img = Image.fromarray(frame)
imgtk = ImageTk.PhotoImage(image=img)
ImageLabel.imgtk = imgtk
ImageLabel.configure(image=imgtk)
progress_var.set(k)
k += 1
time.sleep(1)
root.update()
cap.release()
#root.after(100, loop_function)
loop_function()
root.mainloop()
`