@@ -184,39 +184,45 @@ def _loop_wx(app):
184184@register_integration ("wx" )
185185def loop_wx (kernel ):
186186 """Start a kernel with wx event loop support."""
187-
188187 import wx
189188
190- # Wx uses milliseconds
191- poll_interval = int (1000 * kernel ._poll_interval )
192-
193- shell_stream = get_shell_stream (kernel )
194-
195- def wake (shell_stream ):
196- """wake from wx"""
197- if shell_stream .flush (limit = 1 ):
198- kernel .app .ExitMainLoop ()
199- return
200-
201189 # We have to put the wx.Timer in a wx.Frame for it to fire properly.
202190 # We make the Frame hidden when we create it in the main app below.
203191 class TimerFrame (wx .Frame ): # type:ignore[misc]
204- def __init__ (self , func ):
192+ def __init__ (self , kernel ):
193+ self .kernel = kernel
194+ self .shell_stream = get_shell_stream (kernel )
195+
205196 wx .Frame .__init__ (self , None , - 1 )
206197 self .timer = wx .Timer (self )
207- # Units for the timer are in milliseconds
208- self .timer . Start ( poll_interval )
198+
199+ self .Bind ( wx . EVT_CLOSE , self . on_exit )
209200 self .Bind (wx .EVT_TIMER , self .on_timer )
210- self .func = func
201+
202+ # Units for the timer are in milliseconds
203+ self .timer .Start (int (1000 * self .kernel ._poll_interval ))
204+
205+ def wake (self ):
206+ """wake from wx"""
207+ try :
208+ if self .shell_stream .flush (limit = 1 ):
209+ self .kernel .app .ExitMainLoop ()
210+ except Exception :
211+ pass
211212
212213 def on_timer (self , event ):
213- self .func ()
214+ self .wake ()
215+
216+ def on_exit (self , event ):
217+ self .timer .Stop ()
218+ self .wake ()
219+ self .Destroy ()
214220
215221 # We need a custom wx.App to create our Frame subclass that has the
216222 # wx.Timer to defer back to the tornado event loop.
217223 class IPWxApp (wx .App ): # type:ignore[misc]
218224 def OnInit (self ):
219- self .frame = TimerFrame (partial ( wake , shell_stream ) )
225+ self .frame = TimerFrame (kernel )
220226 self .frame .Show (False )
221227 return True
222228
0 commit comments