0
Ich versuche, eine GUI zu erstellen, die ein Video und ein Bild unter öffnet:Probleme Video in tkinter Anzeige
#!/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()
Die Probleme, die ich habe, sind folgende:
- I Sie müssen die Größe des Bildes anpassen, damit es auf das Etikett passt.
- der kommentierte Teil habe ich von hier bekommen (how to fit image to label in Python) aber es gibt einen Kanalnummernfehler (Zeile 40) und weiter unten gibt der Code einen NoneType Fehler (Zeile 41) und einen ungültigen Bildtyp (numpy Array) in Zeile 42
- das Bild und Video Größe nicht ändern, wenn die Größe des Fensters
Also ich brauche Lösung für dieses tkinter Code (oder sogar einen besseren Rahmen für python)
Gibt es einen bestimmten Grund, warum Sie nach jedem Bild die Größe ändern möchten? Warum nicht 'root.bind (" ", resize_frame)' und nur die Größe ändern, wenn sie benötigt wird? Die Aufrufe 'winfo_screenwidth()' und 'winfo_screenheight()' sollten immer denselben Wert zurückgeben, solange Sie auf demselben Bildschirm bleiben. Sie ändern die Größe von 'frame', aber ändern Sie die Größe des übergeordneten Containers? –
R4PH43L
Ich vergrößere die Größe jedes Frames, weil das Video größer als das Label beginnt und ich habe keine Möglichkeit gefunden, es an der Größe der Labels festzuhalten. –