0
Я пытаюсь создать графический интерфейс, который открывает видео и изображение под ним:Проблемы с отображением видео в Tkinter
#!/usr/bin/python
# -*- coding: utf-8 -*-
#
import Image, ImageTk
import Tkinter, tkMessageBox
import ttk
import cv2
import sys
width, height = 800, 600
banner = cv2.imread('../data/banner.png')
b,g,r = cv2.split(banner)
banner = cv2.merge((r,g,b))
im = Image.fromarray(banner)
cap = cv2.VideoCapture('../data/sample.mov')
root = Tkinter.Tk()
root.bind('<Escape>', lambda e: root.quit())
root.title("Contador")
root.columnconfigure(0, weight=1)
root.rowconfigure(0, weight=1)
lmain = Tkinter.Label(root)
lmain.grid(row=0,column=0,sticky='nsew')
bmain = Tkinter.Label(root)
bmain.grid(row=1,column=0,sticky='nsew')
baner = ImageTk.PhotoImage(image=im)
bmain.configure(image=baner)
def show_frame():
_, frame = cap.read()
if frame is None:
return
# labelWidth = root.winfo_screenwidth()
# labelHeight = root.winfo_screenheight()
# maxsize = (labelWidth, labelHeight)
# frame = frame.resize(maxsize)
cv2image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGBA)
img = Image.fromarray(frame)
imgtk = ImageTk.PhotoImage(image=img)
lmain.imgtk = imgtk
lmain.configure(image=imgtk)
lmain.after(10, show_frame)
show_frame()
root.mainloop()
Проблемы у меня возникают, являются следующие:
- I необходимо изменить размер изображения в соответствии с меткой.
- прокомментированная часть, которую я получил отсюда (how to fit image to label in Python), но она дает ошибку номера канала (строка 40) и далее вниз код дает ошибку NoneType (строка 41) и недопустимый тип изображения (массив numpy) в строке 42
- изображение и видео не изменять размер при изменении размера окна
Так что мне нужно решение для этого TkInter кода (или даже лучше, рамки для питона)
Есть ли конкретная причина, по которой вы хотите изменить размер после каждого кадра? Почему бы не сделать 'root.bind (« », resize_frame)' и при необходимости изменить размер? Вызовы 'winfo_screenwidth()' и 'winfo_screenheight()' должны возвращать всегда одно и то же значение, пока вы остаетесь на одном экране. Вы изменяете размер «фрейм», но изменяете ли вы его родительский контейнер? –
R4PH43L
Я изменяю размер каждого кадра, потому что видео начинается как больше, чем ярлык, и я не нашел способ придерживаться размера этикеток. –