https://github.com/PySide/Tools/tree/master/pysideuic

It’s pure Python, so you should just be able to drop the package onto your 
PYTHONPATH straight from source.

And while I don’t see anything wrong with your proposed alternate workflow, it 
isn’t really any different than invoking the QUiLoader from within your GUI’s 
__init__; you’re still looking at loading and parsing the .ui file every time 
you create a UI instance. Also, you would probably want to pass a parent to the 
loader so the underlying Qt widgets get parented up (and thus cleaned up) 
properly. 

-Nathan



From: Jean-Paul LeDoux 
Sent: Tuesday, February 05, 2013 12:20 PM
To: Nuke Python discussion 
Subject: Re: [Nuke-python] PySide - Proper way to define new panel 
classwithQUiLoader

Hi, follow up question. 

So the example on stack overflow imports pysideuic but this module is not 
included with Nuke (I'm currently testing with Nuke 7.0.4PLE).  I'm assuming it 
is part of the full pyside install.  If that's the case, it means I'll have to 
get the full pyside installed on each workstation I'm guessing? 

How heavily are most nuke pipelines making use of pyside panels?

The other approach I was going to try was defining functions to create the 
instances, then add properties, though this might have other perils...

import PySide.QtGui as QtGui
import PySide.QtCore as QtCore
import PySide.QtUiTools as QtUiTools


from nukescripts import panels


def uiToWidget(uiPath):
    loader = QtUiTools.QUiLoader()
    file = QtCore.QFile(os.path.normpath(uiPath))
    file.open(QtCore.QFile.ReadOnly)
    widget = loader.load(file)
    file.close()
    return widget


def newUberPanel():
    uiPath = "/uberpanel.ui"
    p = uiToWidget(uiPath)  #Got my widget
    
    # And now do stuff with it.

    def connectSignals():
        print "Connect Signals"
    p.fromCurrent_btn.pressed.connect(connectSignals)


    p.thumbnail_lbl.setPixmap(QtGui.QPixmap("/thumbnail_dummy.png"))
    p.folder_btn.setIcon(QtGui.QIcon("/uber_folder.png"))

    return p

Does anyone forsee any problems with this kind of workflow?

Thanks,

JP


On Fri, Feb 1, 2013 at 5:54 PM, Jean-Paul LeDoux <jean.paul.led...@gmail.com> 
wrote:

  Heh, I'd been to that thread, but didn't go to the bottom - thanks a lot, 
Nathan.  I'd like to keep the flexibility of building off the ui files, so I'll 
try to work that code into my pipeline. 

  Cheers,


  JP 



  On Fri, Feb 1, 2013 at 5:40 PM, Nathan Rusch <nathan_ru...@hotmail.com> wrote:

    The QUiLoader does create some unfortunate workflow issues, and even more 
unfortunately, PySide doesn’t ship with a built-in equivalent to PyQt’s 
loadUiType (which generates Python classes instead of instances from .ui files).

    I would recommend either using pyside-uic and compiling your .ui files into 
Python classes to import and use, or (better yet) making use of a function to 
do this for you dynamically at runtime (example here: 
http://stackoverflow.com/a/14195313)

    -Nathan



    From: Jean-Paul LeDoux 
    Sent: Friday, February 01, 2013 5:04 PM
    To: Nuke-python@support.thefoundry.co.uk 
    Subject: [Nuke-python] PySide - Proper way to define new panel class 
withQUiLoader

    Hello,

    I've been trying to get my head around PySide and how to properly define a 
new Panel class from a .ui file.  I have a feeling part of my problem is a 
misunderstanding about how Classes are constructed in python in general.

    Anyways, what I would like to do is define a new panel class from a .ui 
file.

    The basic .ui loading code I'm using is like this(cobbled from this list 
and Stack Overflow...):

    class uberPanel(QtGui.QWidget):
        def __init__(self, parent=None):
            QtGui.QWidget.__init__(self, parent)
            loader = QtUiTools.QUiLoader()
            file = QtCore.QFile("J:/Resrc/rnd/uberpanel.ui")    #Saved out of 
QT Designer
            file.open(QtCore.QFile.ReadOnly)
            self.ui = loader.load(file, self)        #returns a QWidget 
instance not class
            file.close() 



    Now, I don't think this is right, because instead of dealing with the 
uberPanel object, I would end up manipulating the internal uberPanel.ui 
property (the actual panel).  


    Can anyone point me to a cleaner way of building panel classes with the 
QuiLoader?


    Thanks for your time,


    JP





----------------------------------------------------------------------------
    _______________________________________________
    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


    _______________________________________________
    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






--------------------------------------------------------------------------------
_______________________________________________
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
_______________________________________________
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