/XWindowSystem_Screenshoter

A little pypi project to screenshot only one window in linux systems

Primary LanguagePythonMIT LicenseMIT

XWindowSystem_Screenshoter

A simple use and little size python library to get screenshot of a single window on linux!

How use

There are two ways to use it, in synchronous and asynchronous mode (in reference to the screenshot) But the statement is very similar.

Declaration

sync

window_sync = WindowCaptureSync("firefox")

async

window_async = WindowCaptureAsync("firefox")

The biggest difference is that in synchronous mode you must call a function to take the screenshot, whereas in asynchronous mode, a capture function is run in a loop and you will only need to call a property that will contain the most recently captured screenshot

To get Screenshot

sync

window_sync = WindowCaptureSync("firefox")
screenshot = window_sync.get_screenshot()

async

window_async = WindowCaptureAsync("firefox")
window_async.start() # Start thread to screenshot loop
...
screenshot = window_async.screenshot
...
window_async.stop() # Stop thread when not used anymore

Examples

sync

import cv2 as cv
from XWindowSystem_Screenshoter import WindowCaptureSync

wincap = WindowCaptureSync("firefox")

# first capture 
image = wincap.get_screenshot()
image = cv.resize(image, (0,0), fx=0.6, fy=0.6)
cv.imshow("Test", image)

while True:
    # press c to update image    
    if cv.waitKey(1) == ord('c'):
        image = wincap.get_screenshot()
        image = cv.resize(image, (0,0), fx=0.6, fy=0.6)
        cv.imshow("Test", image)

    
    if cv.waitKey(1) == ord('q'):
        cv.destroyAllWindows()
        break

async

import cv2 as cv
from XWindowSystem_Screenshoter import WindowCaptureAsync

wincap = WindowCaptureAsync("firefox")
wincap.start()

while True:
    if wincap.screenshot is not None:
        image = wincap.screenshot
        image = cv.resize(image, (0,0), fx=0.6, fy=0.6)

        cv.imshow("Test", image)
        
        if cv.waitKey(1) == ord('q'):
            cv.destroyAllWindows()
            break
wincap.stop() # don't forget to stop thread!
exit(0)