我有一个用例,我需要绑定一个 ttk 进度条,直到正在播放视频源。
我已经制作了一个父容器,它需要保存一个 Videofeed 和一个小部件(进度条)。我正在使用 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()
`