Воспроизведение видео OpenCV ТОЛЬКО при нажатии кнопки TKinter - PullRequest
0 голосов
/ 20 марта 2020

Я пытался снять кадры видео и воспроизвести их в TKinter при нажатии кнопки. Тем не менее, видео начинает воспроизводиться, как только я запускаю приложение. Может кто-нибудь показать мне, где я ошибаюсь?

def __init__(self, window, delay):

        self.window = window
        self.delay = 15
        window.title("User Interface")
        self.video_source = "movie.mov"
        self.vid = 0
        self.canvas = Canvas(window, width = 400, height = 400)
        self.canvas.pack()
        self.hiButton = Button(window, text="hello", command = self.callback)
        self.hiButton.pack()
        self.getFeedButton = Button(window, text = "Get Feed", \
                                    command = self.feedCallBack(window,"movie.mov"))
        self.getFeedButton.pack()

    def update(self):
        ret, frame = self.get_frame()

        if ret:
            self.photo = ImageTk.PhotoImage(image = Image.fromarray(frame))
            self.canvas.create_image(0, 0, image = self.photo, anchor = tkinter.NW)
        self.window.after(self.delay, self.update)
    def callback(self):
        self.guess = Test()
        print('hi')

    def feedCallBack(self, window, video_source):
        self.vid = cv2.VideoCapture(video_source)
        self.update()

        #self.window.after(self.delay, self.update)
    def get_frame(self):
        ret, frame = self.vid.read()
        if ret:
            return (ret, cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))
        else:
            return (ret, None)

Из этого кода я думаю, что видео будет воспроизводиться только при нажатии кнопки getFeed, но это не то, что происходит.

Ответы [ 2 ]

1 голос
/ 20 марта 2020

Использование лямбда-функции

 self.getFeedButton = Button(window, text = "Get Feed", 
                                command = lambda: self.feedCallBack(window,"movie.mov"))
 self.getFeedButton.pack()
1 голос
/ 20 марта 2020
self.getFeedButton = Button(window, text = "Get Feed", \
                                    command = self.feedCallBack(window,"movie.mov"))

должно быть

self.getFeedButton = Button(window, text = "Get Feed", \
                                    command = lambda: self.feedCallBack(window,"movie.mov"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...