Checking the objectName() of the objects might be a bit more reliable than the windowTitle:

from PySide import QtGui, QtCore

def findviewer():
    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

print findviewer()

On 26/10/16 09:48, Nathan Dunsworth wrote:
The viewer widget is a QGLWidget which does its painting asynchronously
so calling update() or repaint() doesn't really have an immediate effect.

You can use...

pixmap = QtGui.QPixmap.grabWindow(
   THE_VIEWER_WIDGET.winId()
)

This will grab the fully rendered pixmap of the widget from the window
system.  Take note that grabWindow(...) will also pickup any windows you
currently have over the widget.



On Tue, Oct 25, 2016 at 3:59 PM, Carl Schröter <ad...@l-rac.de
<mailto:ad...@l-rac.de>> wrote:

    I played around a bit and it seems like you both are right.
    You can grab the viewer-widget, but when I simply create a pixmap
    from it I get a white square with overlays (roto, roi, etc.)


    from PySide import QtGui, QtCore

    for i in QtGui.qApp.allWidgets():
       # the panes are named!
       if i.windowTitle() == 'Viewer1':
         #
    QtGui.QPixmap.grabWidget(i).save('T:\\nukeviewertests\\complete-viewer.png',
    'png')
         for id, child in enumerate(i.findChildren(QtGui.QWidget)):
           # lazy way to figure out what's interesting
           #
    QtGui.QPixmap.grabWidget(child).save('T:\\nukeviewertests\\'+str(id)+'.png',
    'png')
           if id == 0:
             # this seems to be the viewer bbox starting at bottom left
             print child
             child.setStyleSheet("""QWidget { border: 2px solid green;}""")
           elif id == 1:
             # this seems to be the complete viewer area we are after
             print child
             child.setStyleSheet("""QWidget { border: 2px solid red;}""")


    Seems like there is more going on than simply drawing a widget.
    Did you try using *nukescripts.captureViewer*?**Might be a more
    elegant solution.

    Best,
    Carl



    Mads Lund <madshl...@gmail.com <mailto:madshl...@gmail.com>> schrieb
    am Di., 25. Okt. 2016 um 21:09 Uhr:

        Guess i don't remember correctly then...

        On Tue, Oct 25, 2016 at 9:41 PM, Nathan Dunsworth
        <nathandunswo...@gmail.com <mailto:nathandunswo...@gmail.com>>
        wrote:

            Incorrect...

            You can grab the pixmap of the viewer if you do it correctly.

            On Tue, Oct 25, 2016 at 12:40 PM, Mads Lund
            <madshl...@gmail.com <mailto:madshl...@gmail.com>> wrote:

                The viewer is a seperate GL thing if i remember
                correctly so in python it just appears all black sadly.

                On Tue, Oct 25, 2016 at 6:49 PM, Fredrik Averpil
                <fredrik.aver...@gmail.com
                <mailto:fredrik.aver...@gmail.com>> wrote:

                    I’m trying to figure out how I can find the viewer’s
                    widget (and if you have more than one viewer, I’ll
                    just settle with the first one).

                    Does anyone have an idea on how it can be fetched?

                    I’ve tried to loop over all widgets in
                    |QtGui.qApp.topLevelWidgets()|, identified which
                    ones are layouts and then iterated through their
                    contents… but I haven’t found anything resembling a
                    viewer.

                    I need the widget object, as my goal is to be able
                    to grab a screenshot of it using
                    |QtGui.QPixmap.grabWidget(widget)|:

                    |screenshot = QtGui.QPixmap.grabWidget(widget)
                    filepath = os.path.expanduser("~/screenshot.png")
                    screenshot.save(filepath,'png')
                    |

                    Any ideas?

                    Regards,
                    Fredrik

                    ​

                    _______________________________________________
                    Nuke-python mailing list
                    Nuke-python@support.thefoundry.co.uk
                    <mailto:Nuke-python@support.thefoundry.co.uk>,
                    http://forums.thefoundry.co.uk/
                    <http://forums.thefoundry.co.uk/>
                    
http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
                    
<http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python>



                _______________________________________________
                Nuke-python mailing list
                Nuke-python@support.thefoundry.co.uk
                <mailto:Nuke-python@support.thefoundry.co.uk>,
                http://forums.thefoundry.co.uk/
                <http://forums.thefoundry.co.uk/>
                
http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
                
<http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python>



            _______________________________________________
            Nuke-python mailing list
            Nuke-python@support.thefoundry.co.uk
            <mailto:Nuke-python@support.thefoundry.co.uk>,
            http://forums.thefoundry.co.uk/
            <http://forums.thefoundry.co.uk/>
            http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
            
<http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python>


        _______________________________________________
        Nuke-python mailing list
        Nuke-python@support.thefoundry.co.uk
        <mailto:Nuke-python@support.thefoundry.co.uk>,
        http://forums.thefoundry.co.uk/ <http://forums.thefoundry.co.uk/>
        http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
        <http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python>


    _______________________________________________
    Nuke-python mailing list
    Nuke-python@support.thefoundry.co.uk
    <mailto:Nuke-python@support.thefoundry.co.uk>,
    http://forums.thefoundry.co.uk/ <http://forums.thefoundry.co.uk/>
    http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
    <http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python>




_______________________________________________
Nuke-python mailing list
Nuke-python@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/
http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python


--
ben dickson
2D TD | ben.dick...@rsp.com.au
rising sun pictures | www.rsp.com.au
_______________________________________________
Nuke-python mailing list
Nuke-python@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/
http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python

Reply via email to