summaryrefslogtreecommitdiff
path: root/gr-wxgui/python/wxgui/stdgui2.py
diff options
context:
space:
mode:
authorSylvain Munaut <tnt@246tNt.com>2013-12-15 14:54:31 +0100
committerSylvain Munaut <tnt@246tNt.com>2013-12-20 01:30:44 +0100
commit984273433c97471484bdb45c0865448a915655ee (patch)
tree9468c89547dff5b6deafe721d8bdac0400c93214 /gr-wxgui/python/wxgui/stdgui2.py
parenta0170049b0f6b1d3b1209530aaa6bb38e5324695 (diff)
wxgui: Make sure to only start the flow graph once all init is done
Currently we start the flow graph in the stdframe constructor. However at that point, the frame isn't attached to the app and it's not "shown" yet which means some UI operations can still fail. This is a race condition which happens on OSX. You can reproduce it on linux as well by adding a sleep(1) after starting the flow graph. Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
Diffstat (limited to 'gr-wxgui/python/wxgui/stdgui2.py')
-rw-r--r--gr-wxgui/python/wxgui/stdgui2.py22
1 files changed, 10 insertions, 12 deletions
diff --git a/gr-wxgui/python/wxgui/stdgui2.py b/gr-wxgui/python/wxgui/stdgui2.py
index 53b389dd3c..dbd0307195 100644
--- a/gr-wxgui/python/wxgui/stdgui2.py
+++ b/gr-wxgui/python/wxgui/stdgui2.py
@@ -46,16 +46,20 @@ class stdapp (wx.App):
wx.App.__init__ (self, redirect=False)
def OnInit (self):
- frame = stdframe (self.top_block_maker, self.title, self._nstatus,
- self._max_noutput_items)
+ frame = stdframe (self.top_block_maker, self.title, self._nstatus)
frame.Show (True)
self.SetTopWindow (frame)
+
+ if(self._max_noutput_items is not None):
+ frame.top_block().start (self._max_noutput_items)
+ else:
+ frame.top_block().start ()
+
return True
class stdframe (wx.Frame):
- def __init__ (self, top_block_maker, title="GNU Radio", nstatus=2,
- max_nouts=None):
+ def __init__ (self, top_block_maker, title="GNU Radio", nstatus=2):
# print "stdframe.__init__"
wx.Frame.__init__(self, None, -1, title)
@@ -69,7 +73,7 @@ class stdframe (wx.Frame):
self.SetMenuBar (mainmenu)
self.Bind (wx.EVT_CLOSE, self.OnCloseWindow)
- self.panel = stdpanel (self, self, top_block_maker, max_nouts)
+ self.panel = stdpanel (self, self, top_block_maker)
vbox = wx.BoxSizer(wx.VERTICAL)
vbox.Add(self.panel, 1, wx.EXPAND)
self.SetSizer(vbox)
@@ -85,8 +89,7 @@ class stdframe (wx.Frame):
return self.panel.top_block
class stdpanel (wx.Panel):
- def __init__ (self, parent, frame, top_block_maker,
- max_nouts=None):
+ def __init__ (self, parent, frame, top_block_maker):
# print "stdpanel.__init__"
wx.Panel.__init__ (self, parent, -1)
self.frame = frame
@@ -97,11 +100,6 @@ class stdpanel (wx.Panel):
self.SetAutoLayout (True)
vbox.Fit (self)
- if(max_nouts is not None):
- self.top_block.start (max_nouts)
- else:
- self.top_block.start ()
-
class std_top_block (gr.top_block):
def __init__ (self, parent, panel, vbox, argv):
# Call the hier_block2 constructor