Merge pull request #1802 from PySimpleGUI/Dev-latest
New Demo Program that shows how to use an Graph Element to display O…
This commit is contained in:
commit
5417e6bd74
|
@ -0,0 +1,38 @@
|
||||||
|
import PySimpleGUI as sg
|
||||||
|
import cv2
|
||||||
|
|
||||||
|
"""
|
||||||
|
Demonstration of how to use a GRAPH ELEMENT to draw a webcam stream using OpenCV and PySimpleGUI.
|
||||||
|
Additionally, the thing this demo is really showcasing, is the ability to draw over the top of this
|
||||||
|
webcam stream, as it's being displayed. To "Draw" simply move your mouse over the image, left click and hold, and
|
||||||
|
then drag your mouse. You'll see a series of red circles on top of your image.
|
||||||
|
CURRENTLY ONLY WORKS WITH PySimpleGUI, NOT any of the other ports at this time.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def main():
|
||||||
|
layout = [[sg.Graph((600,450),(0,450), (600,0), key='_GRAPH_', enable_events=True, drag_submits=True)],]
|
||||||
|
|
||||||
|
window = sg.Window('Demo Application - OpenCV Integration', layout)
|
||||||
|
|
||||||
|
graph_elem = window.Element('_GRAPH_') # type: sg.Graph
|
||||||
|
|
||||||
|
id = None
|
||||||
|
# ---===--- Event LOOP Read and display frames, operate the GUI --- #
|
||||||
|
cap = cv2.VideoCapture(0)
|
||||||
|
while True:
|
||||||
|
event, values = window.Read(timeout=0)
|
||||||
|
if event in ('Exit', None):
|
||||||
|
break
|
||||||
|
|
||||||
|
ret, frame = cap.read()
|
||||||
|
imgbytes=cv2.imencode('.png', frame)[1].tobytes()
|
||||||
|
if id:
|
||||||
|
graph_elem.DeleteFigure(id) # delete previous image
|
||||||
|
id = graph_elem.DrawImage(data=imgbytes, location=(0,0)) # draw new image
|
||||||
|
graph_elem.TKCanvas.tag_lower(id) # move image to the "bottom" of all other drawings
|
||||||
|
|
||||||
|
if event == '_GRAPH_':
|
||||||
|
graph_elem.DrawCircle(values['_GRAPH_'], 5, fill_color='red', line_color='red')
|
||||||
|
window.Close()
|
||||||
|
|
||||||
|
main()
|
Loading…
Reference in New Issue