I feel like an idiot. I've been struggling with this for 4 days. I can
make a window but I can't seem to close them. I think I've narrowed
down the problem being with my button event bindings. They don't seem
to take. But I don't get any errors either. So am I missing something?

Any help would be appreciated. Thanks in advance.

I'm building a tool in XSI 6.0 based on this:
http://www.xsi-blog.com/archives/138\
I've copied the XSISubFrame exactly.

My specific app looks like this:

<code>
class jpFrame(XSISubFrame):
        def __init__(self, parent, app):
                XSISubFrame.__init__(self, parent, app, -1, 'jpPointOven',
size=(100, 140))
                self.panel = jpPanel(self)


        def OnClose(self, event):
                """
                This method is bound by XSISubFrame to the EVT_CLOSE event.
                It shows a modal dialog before closing.
                Notice the win32gui hack to disable the XSI top-level window 
during
the modal time.
                """
                dlg = wx.MessageDialog(None, 'Are you sure?', 'Sure?')
                if self.showModalDialog(dlg) == wx.ID_OK:
                        self.panel.onWindowClose()
                        XSISubFrame.OnClose(self, event)



class jpPanel(wx.Panel):
        _runningInstances = []
        def __init__(self, parent):
                wx.Panel.__init__(self, parent, -1)
                self.frame = parent

                selectAllButton = wx.Button(self, -1, "Select*GEO")
                self.Bind(wx.EVT_BUTTON, self.selectAllGeo, selectAllButton)
                selectHeirButton = wx.Button(self, -1, "Select Heir *GEO")
                self.Bind(wx.EVT_BUTTON, self.selectHierGeo, selectHeirButton)

                btn = wx.Button(self, -1, "Close")
                self.Bind(wx.EVT_BUTTON, self.OnClose, btn)
                self.Bind(wx.EVT_CLOSE, self.OnClose)

                scenesFile = r"scenes.txt"
                scenes = self.jpReadLines(scenesFile)
                scenesList = wx.Choice(self, -1, choices=scenes)

                deformButton = wx.Button(self, -1, "Deform Selected")
                self.Bind(wx.EVT_BUTTON, self.applyDeformers, deformButton)

                tID = wx.NewId()

                sizer = wx.BoxSizer(wx.VERTICAL)
                sizer.Add(selectAllButton, 0, wx.ALL)
                sizer.Add(selectHeirButton, 0, wx.ALL)
                sizer.Add(scenesList, 0, wx.ALL)
                sizer.Add(deformButton, 0, wx.ALL)
                sizer.Add(btn, 0, wx.ALL)
                self.SetSizer(sizer)
                self.Layout()
                self.SetSize(sizer.GetSize())
                self.SetAutoLayout(True)
                self.frozen = False

                self.Show(True)
                jpPanel._runningInstances.append(self)


        def selectAllGeo(self,event):
                Application.LogMessage("This is a test: selectAllGeo")

                Application.selectobj('*GEO')

        def selectHierGeo(self, event):
                Application.LogMessage("This is a test: selectHeirGeo")

                Application.SelectTree()
                model = Application.Selection[0]
                Application.selectobj(model.FindChildren('*GEO'))

        def jpReadLines(self, fileToRead):
                lines = []
                badLines = []

                if os.path.exists(fileToRead) == False:
                        print "File Not Found"
                else:
                        thisFile = file(fileToRead, "r+")
                        badLines = thisFile.readlines()
                        thisFile.close()
                for i in range(0, len(badLines)):
                        lines.append(badLines[i].strip())
                return lines

        def applyDeformers(self, event):
                Application.LogMessage("This is a test: applyDeformers")

                path = self.poPath
                scene = self.sceneList.get()
                objs = Application.Selection
                for thisObj in objs:
                        try:
                                Application.SetValue(str(thisObj) + 
".polymsh.PO_XSI_Reader.Mute",
0, "")
                                splitObj = re.split("\.", str(thisObj))
                                thisPath = (path + os.sep + scene + os.sep + 
str(splitObj[0]) +
os.sep + str(splitObj[-1]) + ".mdd")
                                Application.LogMessage(thisPath)
                                Application.SetValue(str(thisObj) +
".polymsh.PO_XSI_Reader.FileName", (path + os.sep + scene + os.sep +
str(splitObj[0]) + os.sep + str(splitObj[-1]) + ".mdd"), "")
                        except:
                                Application.ApplyOp("POXSI", str(thisObj), 
"siUnspecified",
"siPersistentOperation", "", 0)
                                Application.AddExpr((str(thisObj) +
".polymsh.PO_XSI_Reader.POTime"), "T", 1)
                                Application.SetValue(str(thisObj) + 
".polymsh.PO_XSI_Reader.Mute",
0, "")
                                splitObj = re.split("\.", str(thisObj))
                                thisPath = (path + os.sep + scene + os.sep + 
str(splitObj[0]) +
os.sep + str(splitObj[-1]) + ".mdd")
                                Application.LogMessage(thisPath)
                                Application.SetValue(str(thisObj) +
".polymsh.PO_XSI_Reader.FileName", (path + os.sep + scene + os.sep +
str(splitObj[0]) + os.sep + str(splitObj[-1]) + ".mdd"), "")


        def onWindowClose(self):
                jpPanel._runningInstances.remove(self)

        def OnClose(self, evt):
                """Event handler for the button click."""
                self.frame.Close()



jpFrame.create()
</code>

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to