Beispiel #1
0
    def grab_to_buffer(self, buff, file_type="png"):

        # PY2 error:
        #        TypeError: 'PySide2.QtGui.QScreen.grabWindow' called with wrong argument types:
        #           PySide2.QtGui.QScreen.grabWindow(int)
        #        Supported signatures:
        #           PySide2.QtGui.QScreen.grabWindow(WId, int = 0, int = 0, int = -1, int = -1)
        # https://stackoverflow.com/questions/59118938/type-error-when-calling-qscreen-grabwindow
        if py2():
            raise PySide2BugError()

        from PySide2 import QtGui
        from PySide2 import QtCore
        from PySide2 import QtWidgets

        QApplication = QtWidgets.QApplication
        QBuffer = QtCore.QBuffer
        QIODevice = QtCore.QIODevice
        QScreen = QtGui.QScreen
        # QPixmap = self.PySide2.QtGui.QPixmap

        global app
        if not app:
            app = QApplication([])
        qbuffer = QBuffer()
        qbuffer.open(QIODevice.ReadWrite)
        QScreen.grabWindow(QApplication.primaryScreen(),
                           QApplication.desktop().winId()).save(
                               qbuffer, file_type)
        # https://stackoverflow.com/questions/52291585/pyside2-typeerror-bytes-object-cannot-be-interpreted-as-an-integer
        buff.write(qbuffer.data().data())
        qbuffer.close()
Beispiel #2
0
    def grab(self, bbox=None):
        # no pygtk for py3
        if not py2():
            raise GtkError()

        im = read_func_img(self._grab_to_file, bbox)
        return im
Beispiel #3
0
    def grab_to_buffer(self, buff, file_type="png"):
        if py2():
            raise PySide2BugError()
        import PySide2

        from PySide2 import QtGui
        from PySide2 import QtCore
        from PySide2 import QtWidgets

        QApplication = QtWidgets.QApplication
        QBuffer = QtCore.QBuffer
        QIODevice = QtCore.QIODevice
        QScreen = QtGui.QScreen
        # QPixmap = self.PySide2.QtGui.QPixmap

        global app
        if not app:
            app = QApplication([])
        qbuffer = QBuffer()
        qbuffer.open(QIODevice.ReadWrite)
        QScreen.grabWindow(QApplication.primaryScreen(),
                           QApplication.desktop().winId()).save(
                               qbuffer, file_type)
        # https://stackoverflow.com/questions/52291585/pyside2-typeerror-bytes-object-cannot-be-interpreted-as-an-integer
        buff.write(qbuffer.data().data())
        qbuffer.close()
Beispiel #4
0
    def grab(self, bbox=None):
        if py2():
            raise MssError()
        if py3():
            if py_minor() < 5:
                raise MssError()
        import mss

        # atexit.register(sct.close())

        global sct
        if not sct:
            sct = mss.mss()

        # with self.mss.mss() as sct:
        if bbox:
            monitor = bbox
        else:
            monitor = sct.monitors[0]
        sct_img = sct.grab(monitor)

        im = Image.frombytes("RGB", sct_img.size, sct_img.bgra, "raw", "BGRX")
        # The same, but less efficient:
        # im = Image.frombytes('RGB', sct_img.size, sct_img.rgb)
        return im
Beispiel #5
0
def check_import(module):
    found = False
    # try:
    #     __import__(module)

    #     ok = True
    # except ImportError:
    #     pass
    if py2():
        import imp

        try:
            imp.find_module(module)
            found = True
        except ImportError:
            found = False
    else:
        import importlib

        spam_spec = importlib.util.find_spec(module)
        found = spam_spec is not None
    return found
Beispiel #6
0
import tempfile

from pyscreenshot.util import py2

if py2():
    from pyscreenshot import tempdir27

    TemporaryDirectory = tempdir27.TemporaryDirectory27
else:
    TemporaryDirectory = tempfile.TemporaryDirectory
from pyscreenshot.util import py2
from bt import backend_to_check, gnome, kde

# no jeepney for py2
if gnome() and not py2():

    def test_gnome_dbus():
        assert not kde()
        backend_to_check("gnome_dbus")
Beispiel #8
0
from pyscreenshot.util import platform_is_osx, py2
from bt import backend_to_check, check_import

# qt color problem on osx
if not platform_is_osx():

    if not py2() and check_import("PySide2"):

        def test_pyside2():
            backend_to_check("pyside2")
Beispiel #9
0
from pyscreenshot.util import py2
from bt import backend_to_check, check_import

# no pygtk for py3
if py2() and check_import("gtk"):

    def test_pygtk():
        backend_to_check("pygtk")
from pyscreenshot.util import py2
from bt import backend_to_check, gnome, kde

# no jeepney for py2
if kde() and not py2():

    def test_kwin_dbus():
        assert not gnome()
        backend_to_check("kwin_dbus")
Beispiel #11
0
except ImportError:
    display = None


# https://github.com/python-xlib/python-xlib/blob/master/examples/xrandr.py#L44
def missing_RANDR():
    if platform_is_osx():
        return False
    if not display:
        return False
    disp = display.Display()
    return not disp.has_extension("RANDR")


ok = False
if not py2() and check_import("mss"):
    if platform_is_osx() and not use_x_display():
        ok = True
    if platform_is_linux() and use_x_display():
        ok = True
    if platform_is_win():
        ok = True

if ok:

    def test_mss():
        if missing_RANDR():
            try:
                backend_to_check("mss")
            except FailedBackendError:
                pass