Created
October 26, 2016 06:25
-
-
Save fredrikaverpil/9056ad6e642b814090829edffb4ffd27 to your computer and use it in GitHub Desktop.
Grab the viewer from Nuke
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from PySide import QtGui | |
def grab_widget(widget=None, filepath=None): | |
"""This is a test and is not proofed for production | |
Note: | |
See QPixmap members being obsolete in Qt5: | |
http://doc.qt.io/qt-5/qpixmap-obsolete.html | |
""" | |
try: | |
screenshot = QtWidgets.QWidget.grab(widget) # Qt5 | |
except: | |
screenshot = QtGui.QPixmap.grabWidget(widget) # Qt4 | |
if filepath: | |
screenshot.save(filepath, 'png') | |
def grab_desktop(filepath=None): | |
"""Grab the entire desktop and save as PNG""" | |
app = QtGui.QApplication.instance() | |
screenshot = QtGui.QPixmap.grabWindow(app.desktop().winId()) | |
if filepath: | |
screenshot.save(filepath, 'png') | |
def grab_window(window_id, filepath=None): | |
"""Grab the given window by its id | |
Example usage: | |
grab_window(window_id=widget.winId()) | |
Note: | |
In Qt5, QPixmap.grabWindow is obsolete and instead we should use | |
QScreen.grabWindow. This is, however, not possible yet in | |
PySide2. | |
Read more: http://doc.qt.io/qt-5/qpixmap-obsolete.html | |
""" | |
screenshot = QtGui.QPixmap.grabWindow(window_id) # Qt4 | |
if filepath: | |
screenshot.save(filepath, 'png') | |
def find_viewers(): | |
"""Return all viewer widgets""" | |
stack = QtGui.QApplication.topLevelWidgets() | |
viewers = [] | |
while stack: | |
widget = stack.pop() | |
if widget.objectName().startswith('Viewer.'): | |
viewers.append(widget) | |
stack.extend(c for c in widget.children() if c.isWidgetType()) | |
return viewers | |
viewer_widgets = find_viewers() | |
if len(viewer_widgets) > 0: | |
widget = viewer_widgets[0] | |
grab_desktop(filepath=os.path.expanduser('~/Desktop/screengrab_desktop.png')) | |
grab_widget(widget=widget, filepath=os.path.expanduser('~/Desktop/screengrab_widget.png')) | |
grab_window(window_id=widget.winId(), filepath=os.path.expanduser('~/Desktop/screengrab_window.png')) |
How would I invoke this within Nuke????
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
For some reason, there's a discrepancy for
QPixmap.grabWindow
on OS X vs Windows. See below and comparescreengrab_window.png
on OS X/Windows.Windows (Nuke 9.0v9)
screengrab_desktop.png

### screengrab_widget.png
### screengrab_window.png
# OS X (Nuke 9.0v9) ### screengrab_desktop.pngscreengrab_widget.png
screengrab_window.png