1

我有一个用例,我需要绑定一个 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()

`

4

0 回答 0