In the single inheritance approach, the key line you woud have been missing
was:

    self.ui.setupUi(self)

.. which would set up the ui onto the current class.

As for the TypeError, your Ui class should be a generic class if it came
straight from designer. Looking something like this:

class Ui_skinWrangler(object):
    def setupUi(self, skinWrangler):

If you created that file by hand or modified it, and it was a QMainWindow
subclass, then yea this would not work for you. Usually you just generate
them from designer and use them directly in your implementation,
unmodified.


On Mon, Apr 23, 2012 at 2:41 PM, Christopher Evans <[email protected]>wrote:

> Thanks for your help, you cleared some things up for me.  I had used
> this self.ui.blah approach because I saw that at a company I worked
> for, it's also the stated 'single inheritance' approach in the QT docs
> here:
> http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/designer.html
>
> In your example I would get this:
> TypeError: ('Wrong base class of toplevel widget', (<class
> '__main__.skinWrangler'>, 'QDialog'))
>
> So I made it a QDialog and added this string from the docs:
>
> def __init__(self):
>                >>>QtGui.QDialog.__init__(self)
>
> Now it works fine! (the onClose)
>
> CE
>
> On Mon, Apr 23, 2012 at 3:57 AM, Justin Israel <[email protected]>
> wrote:
> > You have some issues with the way you are loading and using your UI.
> > Notice that you are loading the UI into self.ui, but then implementing
> > events on self. Your end up calling self.ui.show() from your init which
> is
> > showing a completely different object than your main window class.
> >
> > Normally, I would recommend either precompiling your UIC via pyuic4, or,
> > loading it in on the fly and then inheriting from it:
> >
> > class SkinWrangler(QtGui.QMainWindow, Ui_skinWrangler):
> >     def __init__(self, parent=None):
> >         super(SkinWrangler, self).__init__(parent)
> >         self.setupUi(self)
> >
> > There are variations of that approach, where some people will store the
> ui
> > as an object:
> > self.ui = Ui_skinWrangler()
> > self.ui.setupUi(self)
> >
> > The immediate fix for how you are using loadUi is to tell it to set it
> up on
> > your main window (similar to what setupUi does):
> >
> > class skinWrangler(QtGui.QMainWindow):
> >     def __init__(self):
> >
> >         # other stuff here #
> >
> >         uiPath = "/path/to/ui/test.ui"
> >         uic.loadUi(uiPath, self)
> >
> >     def closeEvent(self, e):
> >         print 'CLOSED'
> >
> > win = skinWrangler()
> > win.show()  # instead of win.ui.show()
> >
> > Don't call show() from your init. It should be called by the entry-point
> > function that is launching your UI.
> > Now you will see your closeEvent get called when the window is closed.
> > The reason you were seeing it look like it was occurring during init each
> > time, is that what it was really doing was deleting your previous
> instance
> > with cmds.deleteUI() which triggers the closeEvent for that previous
> widget.
> >
> >
> >
> >
> > On Sun, Apr 22, 2012 at 5:21 PM, Christopher Evans <
> [email protected]>
> > wrote:
> >>
> >> http://pastebin.com/PKEyg0FJ
> >>
> >> On Mon, Apr 23, 2012 at 1:11 AM, Justin Israel <[email protected]>
> >> wrote:
> >> > Post your latest code? Maybe you have a strange indent. No idea why
> the
> >> > closeEvent would happen right away unless maybe you are letting it get
> >> > garbage collected immediately.
> >> >
> >> >
> >> > On Sun, Apr 22, 2012 at 3:51 PM, Christopher Evans
> >> > <[email protected]>
> >> > wrote:
> >> >>
> >> >> If I pipe that 'name' into the 'p' parent flag of the sciptjob, it
> >> >> lives on after i close the window.  Second, integrating your code,
> the
> >> >> closeEvent runs at the time I execute the script and the window opens
> >> >> (weird?) it doesn't run on close.
> >> >>
> >> >> On Sat, Apr 21, 2012 at 5:16 AM, John Patrick <[email protected]>
> >> >> wrote:
> >> >> > You need to set the object name to be able to find it in Maya:
> >> >> > http://pastebin.com/T4tJ4GjE
> >> >> >
> >> >> >
> >> >> > On Fri, Apr 20, 2012 at 5:56 PM, Christopher Evans
> >> >> > <[email protected]>
> >> >> > wrote:
> >> >> >>
> >> >> >> class skinWrangler(QtGui.QMainWindow):
> >> >> >>    def __init__(self):
> >> >> >>                QtGui.QMainWindow.__init__(self)
> >> >> >>
> >> >> >> Looks like I am creating the window differently than you guys.
> >> >> >>
> >> >> >> I was going to give this skinning tool away free anyways, here's
> >> >> >> that
> >> >> >> few surrounding chunks of code: http://pastebin.com/5tJfvSB7
> >> >> >>
> >> >> >> Thanks,
> >> >> >>
> >> >> >> CE
> >> >> >>
> >> >> >> On Sat, Apr 21, 2012 at 2:06 AM, Justin Israel
> >> >> >> <[email protected]>
> >> >> >> wrote:
> >> >> >> > I hit send to fast. Ignore that silly line at the end of my last
> >> >> >> > message
> >> >> >> > :-)
> >> >> >> >
> >> >> >> >
> >> >> >> > On Fri, Apr 20, 2012 at 5:05 PM, Justin Israel
> >> >> >> > <[email protected]>
> >> >> >> > wrote:
> >> >> >> >>
> >> >> >> >> On Fri, Apr 20, 2012 at 4:25 PM, Christopher Evans
> >> >> >> >> <[email protected]>
> >> >> >> >> wrote:
> >> >> >> >>>
> >> >> >> >>> First lemme start with: Is it possible to use closeEvent() in
> >> >> >> >>> Maya?
> >> >> >> >>> I
> >> >> >> >>> cannot get that to work.
> >> >> >> >>
> >> >> >> >>
> >> >> >> >> Can you be more specific about what is giving you trouble?
> >> >> >> >> This works just fine:
> >> >> >> >>
> >> >> >> >> class Window(QtGui.QMainWindow):
> >> >> >> >>     def closeEvent(self, e):
> >> >> >> >>         print "HIT"
> >> >> >> >>
> >> >> >> >>>
> >> >> >> >>>
> >> >> >> >>> Can someone tell me how to feed a custom pyqt mainWindow tool
> >> >> >> >>> into
> >> >> >> >>> the
> >> >> >> >>> parent flag of a scriptjob?
> >> >> >> >>>
> >> >> >> >>>
> >> >> >> >>> I have been looking all over teh internets, I think it
> involves
> >> >> >> >>> SIP
> >> >> >> >>> somehow.. all examples I have seen show QDialog, or mel/python
> >> >> >> >>> commands UIs.
> >> >> >> >>
> >> >> >> >>
> >> >> >> >> The part about getting the maya UI name from a pyqt widget has
> >> >> >> >> been
> >> >> >> >> asked
> >> >> >> >> before.
> >> >> >> >> It goes like this:
> >> >> >> >>
> >> >> >> >> import sip
> >> >> >> >> import maya.OpenMayaUI as mui
> >> >> >> >>
> >> >> >> >> win = # some PyQt widget
> >> >> >> >> mayaName = mui.MQtUtil.fullName(long(sip.unwrapinstance(win)))
> >> >> >> >>
> >> >> >> >> You can also check out
> >> >> >> >>>
> >> >> >> >>>
> >> >> >> >>> Thanks,
> >> >> >> >>>
> >> >> >> >>> --
> >> >> >> >>> CE
> >> >> >> >>>
> >> >> >> >>> --
> >> >> >> >>> view archives:
> http://groups.google.com/group/python_inside_maya
> >> >> >> >>> change your subscription settings:
> >> >> >> >>> http://groups.google.com/group/python_inside_maya/subscribe
> >> >> >> >>
> >> >> >> >>
> >> >> >> >
> >> >> >> > --
> >> >> >> > view archives:
> http://groups.google.com/group/python_inside_maya
> >> >> >> > change your subscription settings:
> >> >> >> > http://groups.google.com/group/python_inside_maya/subscribe
> >> >> >>
> >> >> >>
> >> >> >>
> >> >> >> --
> >> >> >> CE
> >> >> >>
> >> >> >> --
> >> >> >> view archives: http://groups.google.com/group/python_inside_maya
> >> >> >> change your subscription settings:
> >> >> >> http://groups.google.com/group/python_inside_maya/subscribe
> >> >> >
> >> >> >
> >> >> >
> >> >> >
> >> >> > --
> >> >> > John Patrick
> >> >> > 404-242-2675
> >> >> > [email protected]
> >> >> > http://www.canyourigit.com
> >> >> >
> >> >> > --
> >> >> > view archives: http://groups.google.com/group/python_inside_maya
> >> >> > change your subscription settings:
> >> >> > http://groups.google.com/group/python_inside_maya/subscribe
> >> >>
> >> >>
> >> >>
> >> >> --
> >> >> CE
> >> >>
> >> >> --
> >> >> view archives: http://groups.google.com/group/python_inside_maya
> >> >> change your subscription settings:
> >> >> http://groups.google.com/group/python_inside_maya/subscribe
> >> >
> >> >
> >> > --
> >> > view archives: http://groups.google.com/group/python_inside_maya
> >> > change your subscription settings:
> >> > http://groups.google.com/group/python_inside_maya/subscribe
> >>
> >>
> >>
> >> --
> >> CE
> >>
> >> --
> >> view archives: http://groups.google.com/group/python_inside_maya
> >> change your subscription settings:
> >> http://groups.google.com/group/python_inside_maya/subscribe
> >
> >
> > --
> > view archives: http://groups.google.com/group/python_inside_maya
> > change your subscription settings:
> > http://groups.google.com/group/python_inside_maya/subscribe
>
>
>
> --
> CE
>
> --
> view archives: http://groups.google.com/group/python_inside_maya
> change your subscription settings:
> http://groups.google.com/group/python_inside_maya/subscribe
>

-- 
view archives: http://groups.google.com/group/python_inside_maya
change your subscription settings: 
http://groups.google.com/group/python_inside_maya/subscribe

Reply via email to