This is an example of minimal tkinter application that shows video image on the window using OpenCV.
Prerequisites
- Python 3
Required Packages
Install packages if not already.
1. Python Imaging Library (Pillow)
pip install Pillow
2. OpenCV
pip install opencv-python
import tkinter as tk
from PIL import Image, ImageTk
import cv2
class MainWindow():
def __init__(self, window, cap):
self.window = window
self.cap = cap
self.width = self.cap.get(cv2.CAP_PROP_FRAME_WIDTH)
self.height = self.cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
self.interval = 20 # Interval in ms to get the latest frame
# Create canvas for image
self.canvas = tk.Canvas(self.window, width=self.width, height=self.height)
self.canvas.grid(row=0, column=0)
# Update image on canvas
self.update_image()
def update_image(self):
# Get the latest frame and convert image format
self.image = cv2.cvtColor(self.cap.read()[1], cv2.COLOR_BGR2RGB) # to RGB
self.image = Image.fromarray(self.image) # to PIL format
self.image = ImageTk.PhotoImage(self.image) # to ImageTk format
# Update image
self.canvas.create_image(0, 0, anchor=tk.NW, image=self.image)
# Repeat every 'interval' ms
self.window.after(self.interval, self.update_image)
if __name__ == "__main__":
root = tk.Tk()
MainWindow(root, cv2.VideoCapture(0))
root.mainloop()
Execute the program like this:
python3 video_on_tkinter.py
If you want to get the image from a video file instead of a camera, specify the file name like this:
MainWindow(root, cv2.VideoCapture('test.mp4'))
References
[1] How to update an image on a Canvas? — Stack Overflow
[2] How do you run your own code alongside Tkinter’s event loop? — Stack Overflow
[3] Displaying a video feed with OpenCV and Tkinter — pyimagesearch
[4] Python OpenCV – show a video in a Tkinter window — Solarian Programmer

Hi Max,
I need help with some RPi bluetooth programming for an application I am trying to build for our business.
Do you do contract work?
Unfortunately it is only a small project though.
Greetings,
Martin