screenshare/venv/lib/python3.12/site-packages/pyscreenshot/plugins/wxscreen.py
2024-11-29 18:15:30 +00:00

63 lines
1.5 KiB
Python

import logging
from PIL import Image
from pyscreenshot.plugins.backend import CBackend
from pyscreenshot.util import platform_is_osx
log = logging.getLogger(__name__)
# based on:
# http://stackoverflow.com/questions/69645/take-a-screenshot-via-a-python-script-linux
class WxBackendError(Exception):
pass
app = None
class WxScreen(CBackend):
name = "wx"
# conflict with pygdk3
# wx is never installed by default
# pygdk3 is default on Gnome
def grab(self, bbox=None):
if platform_is_osx():
raise WxBackendError("osx not supported")
import wx # type: ignore
global app
if not app:
app = wx.App()
screen = wx.ScreenDC()
size = screen.GetSize()
if wx.__version__ >= "4":
bmp = wx.Bitmap(size[0], size[1])
else:
bmp = wx.EmptyBitmap(size[0], size[1])
mem = wx.MemoryDC(bmp)
mem.Blit(0, 0, size[0], size[1], screen, 0, 0)
del mem
if hasattr(bmp, "ConvertToImage"):
myWxImage = bmp.ConvertToImage()
else:
myWxImage = wx.ImageFromBitmap(bmp)
im = Image.new("RGB", (myWxImage.GetWidth(), myWxImage.GetHeight()))
if hasattr(Image, "frombytes"):
# for Pillow
im.frombytes(bytes(myWxImage.GetData()))
else:
# for PIL
im.fromstring(myWxImage.GetData())
if bbox:
im = im.crop(bbox)
return im
def backend_version(self):
import wx
return wx.__version__