由于需要在关闭窗口时自动关掉打开的串口,所以在wx.Frame初始化时调用了 wx.EVT_CLOSE方法:
- self.Bind(wx.EVT_CLOSE, self.OnCloseWindow, self)
函数实现为:
- def OnCloseWindow(self, evt):
- if self.serialFd != None:
- self.serialFd.close()
- self.serialFd=None
- print “RAETestFrame exit”
- self.Close()
- self.Destroy()
但是,在使用的时候,总是会报出这个错误:RuntimeError: maximum recursion depth exceeded in cmp,
打印输出函数也是一大串。这里面,self.Close()是之前在使用按钮或者菜单关闭窗口的时候调用的函数,直接搬来了;self.Destroy()是窗口关闭函数,不然点了X窗口没有反应。今天尝试着把self.Close()屏蔽掉,发现居然正常了!原来self.Close()函数执行是,就是调用关闭事件wx.EVT_CLOSE,也就是右上角的X,如果在函数实现中再加入self.Close,就会造成自身递归调用,深度溢出,上报溢出错误了。