Когда я пытаюсь вызвать self.Close (True) в обработчике события EVT_CLOSE верхнего уровня Frame, он вызывает RuntimeError: превышена максимальная глубина рекурсии. Вот код:wxPython wx.Close create runtime error
from PicEvolve import PicEvolve
import wx
class PicEvolveFrame(wx.Frame):
def __init__(self, parent, id=-1,title="",pos=wx.DefaultPosition,
size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE,
name="frame"):
wx.Frame.__init__(self,parent,id,title,pos,size,style,name)
self.panel = wx.ScrolledWindow(self)
self.panel.SetScrollbars(1,1,600,400)
statusBar = self.CreateStatusBar()
menuBar = wx.MenuBar()
menu1 = wx.Menu()
m = menu1.Append(wx.NewId(), "&Initialize", "Initialize population with random images")
menuBar.Append(menu1,"&Tools")
self.Bind(wx.EVT_MENU,self.OnInit,m)
self.Bind(wx.EVT_CLOSE,self.OnClose)
self.SetMenuBar(menuBar)
def OnInit(self, event):
dlg = wx.TextEntryDialog(None,"Enter Population Size:","Population Size")
popSize = 0
if dlg.ShowModal() == wx.ID_OK:
popSize = int(dlg.GetValue())
self.pEvolver = PicEvolve(popSize,(200,200),True)
box = wx.BoxSizer(wx.VERTICAL)
filenames = []
for i in range(popSize):
filenames.append("img"+str(i)+".png")
for fn in filenames:
img = wx.Image(fn,wx.BITMAP_TYPE_ANY)
box.Add(wx.StaticBitmap(self.panel,wx.ID_ANY,wx.BitmapFromImage(img)), 0,wx.BOTTOM)
self.panel.SetSizer(box)
def OnClose(self,event):
self.Close(True)
class PicEvolveApp(wx.App):
def OnInit(self):
self.frame = PicEvolveFrame(parent=None,title="PicEvolve")
self.frame.Show()
self.SetTopWindow(self.frame)
return True
if __name__ == "__main__":
app = PicEvolveApp()
app.MainLoop()
и, кстати, близко уже называют на раме при закрытии, так что этот обратный вызов не нужен, если вы не хотите, чтобы _do_ что-то во время Это. – iondiode
Хммм .. Я попробовал добавить Skip(), и он все равно возвращает ту же ошибку. Причина, по которой я поставил обратный вызов, состоит в том, что, когда я пытаюсь выйти, иначе окно закрывается, но программа все еще работает в подсказке. – Johnny
Да, это потому, что я поставил там все еще неправильно (дох). На самом деле, если я прокомментирую строку импорта PicEvolve, и я удаляю call onclose и onClose, этот код работает нормально. Возможно, что-то в модуле picEvolve работает на init – iondiode