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 <[email protected]> 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 <[email protected]>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 <[email protected]> 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 <[email protected]
> > >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 <[email protected]> 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

Reply via email to