Switch the event type to ChildPolished:

    if event.type() == QtCore.QEvent.ChildPolished:

This will fire after the ChildAdded, and after the paint event. Seems to be
when the maya object is available.



On Thu, Apr 12, 2012 at 5:14 PM, Jesse Capper <jesse.cap...@gmail.com>wrote:

> It seems like at the time of the childAdded event filter, that the
> hypershade hasn't been fully constructed (My knowledge of how the Maya
> UI/layouts function/are constructed is pretty new, so this may be
> common knowledge). sip.unwrapinstance() will give me a valid pointer,
> but MQtUtil.fullName() returns None.
>
> If I take that pointer and run MQtUtil.fullName() on my own after the
> hypershade has been constructed it will return the name. I feel like
> I'm missing a simple step or two.
>
> Here is the code I'm using:
> class Filter(QtCore.QObject):
>    def eventFilter(self, obj, event):
>         if event.type() == QtCore.QEvent.ChildAdded:
>            child = event.child()
>            maya_name =
> mui.MQtUtil.fullName(long(sip.unwrapinstance(child)))
>            print 'Child -- ', child    #the widget object
>            print 'Full Name -- ', maya_name    #None
>         return False
>
> ptr = mui.MQtUtil.mainWindow()
> mainWin = sip.wrapinstance(long(ptr), QtGui.QMainWindow)
>
> f = Filter()
> mainWin.installEventFilter(f)
>
> Thanks,
> Jesse
>
>
> On Apr 12, 3:12 pm, Justin Israel <justinisr...@gmail.com> wrote:
> > Sorry, I kinda neglected to address checking the child widget in that
> > example.
> >
> > Unwrap the qobject with sip:
> >
> > child = event.child()
> > mayaName = MQtUtil.fullName(long(sip.unwrapinstance(child)))
> >
> > On Thu, Apr 12, 2012 at 2:41 PM, Jesse Capper <jesse.cap...@gmail.com
> >wrote:
> >
> >
> >
> >
> >
> >
> >
> > > Awesome, that helps.
> >
> > > I'm having trouble determining if the created child is a certain type
> > > of panel. My original thought was to get the maya UI name and check
> > > it's type with cmds.getPanel, however MQtUtil.fullName() is asking for
> > > a pointer, not the QWidget that event.child() returns, and I don't
> > > know how to pass it a pointer to the widget (or if there is a better
> > > way to either get the Maya UI name, or figure out if the child is a
> > > panel of type x).
> >
> > > Thanks,
> > > Jesse
> >
> > > On Apr 12, 12:55 pm, Justin Israel <justinisr...@gmail.com> wrote:
> > > > In your eventFilter for the mainWindow, you can check for the
> ChildAdded
> > > > event.
> > > > Nice thing is that you dont have to go looking it up and converting
> it
> > > :-)
> >
> > > > class Filter(QtCore.QObject):
> > > >     def eventFilter(self, obj, event):
> >
> > > >         typ = event.type()
> >
> > > >         if typ == event.ChildAdded:
> > > >             hyperWidget = event.child()
> > > >             # set up stuff on the hyperWidget QWidget
> >
> > > >         return False
> >
> > > > On Thu, Apr 12, 2012 at 10:53 AM, Jesse Capper <
> jesse.cap...@gmail.com
> > > >wrote:
> >
> > > > > Related question:
> > > > > Can you attach a persistent filterEvent to a panel like the
> > > > > hypershade? Or maybe attach a callback to the hyperShadePanel type
> to
> > > > > create a filterEvent every time the panel is created?
> >
> > > > > I can get the QWidget for the hypershade if it already exists:
> >
> > > > > hypershade_panel = cmds.getPanel(sty='hyperShadePanel')[0]
> > > > > if hypershade_panel in cmds.getPanel(vis=True):
> > > > >    ptr = mui.MQtUtil.findControl(hypershade_panel)
> >
> > > > > Problem is that since the QWidget for the panel gets destroyed
> every
> > > > > time it is closed, I'd have to reattach the filterEvent every time
> it
> > > > > is reopened (or make it persistent, but I'm guessing that since the
> > > > > widget gets destroyed, that isn't possible), and I don't know how
> to
> > > > > do that. Is it possible, a bad idea, anything?
> >
> > > > > Thanks,
> > > > > Jesse
> >
> > > > > On Apr 10, 6:08 pm, notanymike <notanym...@gmail.com> wrote:
> > > > > > Thanks. I somehow overlooked eventFilter from the QObject docs...
> >
> > > > > --
> > > > > 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
>
> --
> 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