From 78d6a0bab699dae9feed7afb1bd297b90369cb5f Mon Sep 17 00:00:00 2001 From: Joseph Yu Date: Thu, 23 Apr 2020 17:31:15 +0100 Subject: [PATCH 1/2] Qt 4/5 specific screen grab routines Squash of wwfxuk's fork: 3677f70 and e9b03bc --- python/screen_grab/screen_grab.py | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/python/screen_grab/screen_grab.py b/python/screen_grab/screen_grab.py index 2ff75f15..427c4eda 100644 --- a/python/screen_grab/screen_grab.py +++ b/python/screen_grab/screen_grab.py @@ -15,6 +15,8 @@ from sgtk.platform.qt import QtCore, QtGui import sgtk +QT_MAJOR = int(QtCore.qVersion().split(".")[0]) # Works for PySide* and PyQt* + class ScreenGrabber(QtGui.QDialog): """ @@ -332,10 +334,19 @@ def get_desktop_pixmap(rect): :returns: Captured image :rtype: :class:`~PySide.QtGui.QPixmap` """ - desktop = QtGui.QApplication.desktop() - return QtGui.QPixmap.grabWindow( - desktop.winId(), rect.x(), rect.y(), rect.width(), rect.height() - ) + x_y_w_h = rect.x(), rect.y(), rect.width(), rect.height() + + if QT_MAJOR == 5: + screen = QtGui.QApplication.primaryScreen() + pixmap = screen.grabWindow(0, *x_y_w_h) + elif QT_MAJOR == 4: + desktop = QtGui.QApplication.desktop() + pixmap = QtGui.QPixmap.grabWindow(desktop.winId(), *x_y_w_h) + else: + message = "Screen capture not implmented for Qt %d" + raise NotImplementedError(message % QT_MAJOR) + + return pixmap # Backwards compatibility, as this used to be a module-level From 526b2a87e3ad96036dc3738e701df29f6db660f5 Mon Sep 17 00:00:00 2001 From: Joe Yu Date: Tue, 2 Jun 2020 11:07:10 +0100 Subject: [PATCH 2/2] Fix for Maya 2019 error (#5) * Initial fix * Py3 friendly long * Fixed missing :, extra comment space --- python/screen_grab/screen_grab.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/python/screen_grab/screen_grab.py b/python/screen_grab/screen_grab.py index 427c4eda..325c9b25 100644 --- a/python/screen_grab/screen_grab.py +++ b/python/screen_grab/screen_grab.py @@ -334,14 +334,21 @@ def get_desktop_pixmap(rect): :returns: Captured image :rtype: :class:`~PySide.QtGui.QPixmap` """ + desktop_id = QtGui.QApplication.desktop().winId() x_y_w_h = rect.x(), rect.y(), rect.width(), rect.height() if QT_MAJOR == 5: screen = QtGui.QApplication.primaryScreen() - pixmap = screen.grabWindow(0, *x_y_w_h) + try: + pixmap = screen.grabWindow(desktop_id, *x_y_w_h) + except TypeError as error: + if "quintptr" in str(error): + ptr_type = getattr(__builtins__, "long", int) # Py3 safe long + pixmap = screen.grabWindow(ptr_type(desktop_id), *x_y_w_h) + else: + raise elif QT_MAJOR == 4: - desktop = QtGui.QApplication.desktop() - pixmap = QtGui.QPixmap.grabWindow(desktop.winId(), *x_y_w_h) + pixmap = QtGui.QPixmap.grabWindow(desktop_id, *x_y_w_h) else: message = "Screen capture not implmented for Qt %d" raise NotImplementedError(message % QT_MAJOR)