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