Hello<br> i found the problem. It's calling self.list.ClearAll that causes the segmentation fault.<br>removing the call to ClearAll fixed my problem , but i still want to clear the list before i load new data......<br>
could anyone assist?<br><br>wkr<br> marco<br><br><div class="gmail_quote">On Fri, Oct 19, 2012 at 11:05 PM, Marco Mistroni <span dir="ltr"><<a href="mailto:mmistroni@gmail.com" target="_blank">mmistroni@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi all<br> i have written a wx GUI which downloads json data from a server, and populate a listbox.<br>Every time i populate a listbox, i am receiving Segmentation Faults.<br>
I have tried to retrieve data from the URL via separate thread, and to use events, but i am still getting a segmentation fault<br>
<br>could anyone assist pls?<br><br>here's relevant code. I m running python on Ubuntu 10.04<br><br>class WxSharesGUI(wx.Frame):<br> <br><br> def __init__(self, parent, id, title):<br> wx.Frame.__init__(self, parent, id, title, size=(300, 300))<br>
self.InitUI()<br> <br> def InitUI(self): <br> self.load_button = wx.Button(self, wx.ID_ANY, "load ListBox")<br> self.clear_button = wx.Button(self, wx.ID_ANY, "clear ListBox")<br>
self.load_button.Bind(wx.EVT_BUTTON, self.load_buttonClick)<br> self.clear_button.Bind(wx.EVT_BUTTON, self.clear_buttonClick)<br> self.Bind(EVT_RESULT, self.OnResult)<br> self.lock = threading.RLock()<br>
<br> # Creating Menu bar<br> menubar = wx.MenuBar()<br> newsMenu = wx.Menu()<br> newsMenu.Append(ID_EDGAR, 'Edgar News', 'Edgar news')<br> newsMenu.Append(ID_GLOBAL, 'Global Economy', 'Global economy')<br>
newsMenu.Append(ID_ECONOMY, 'Economy Data', 'Economy data')<br> newsMenu.Append(ID_FX, 'FX', 'Fx data')<br> futuresItem = newsMenu.Append(ID_FUTURES, 'FUTURES', 'FUTURES')<br>
exitItem = newsMenu.Append(wx.ID_EXIT, 'Quit', 'Quit application')<br> menubar.Append(newsMenu, '&News')<br> <br> mgmtMenu = wx.Menu()<br> shareMgmtItem = mgmtMenu.Append(ID_UPDATE_SHARE, 'Share Management', 'Share Management')<br>
ptfMgmtItem = mgmtMenu.Append(ID_UPDATE_PORTFOLIO, 'Portfolio Management', 'Portfolio Mgmt')<br> resetItem = mgmtMenu.Append(ID_RESET, 'Reset Listbox', 'Portfolio Mgmt')<br> menubar.Append(mgmtMenu, '&Management')<br>
<br><br> self.SetMenuBar(menubar)<br> <br> self.Bind(wx.EVT_MENU, self.OnQuit, exitItem)<br> self.Bind(wx.EVT_MENU, self.OnFutures, futuresItem)<br> self.Bind(wx.EVT_MENU, self.OnShareMgmt, shareMgmtItem)<br>
self.Bind(wx.EVT_MENU, self.OnPtfMgmt, ptfMgmtItem)<br><br> self.listBox1 = wx.ListBox(self, wx.ID_ANY, choices=[],<br> style=wx.LB_EXTENDED)<br> self.listBox1.Append('MAIN')<br> self.listBox1.Append('INDEXES') <br>
self.listBox1.Append('CURRENCIES')<br> self.listBox1.Append('HEDGE')<br> self.listBox1.Append('CDS SPREADS')<br> self.listBox1.Bind(wx.EVT_LISTBOX, self.OnListBox1Listbox,<br> id=ID_FRAME1LISTBOX1)<br>
self.Bind(wx.EVT_MENU, self.OnResetList, resetItem)<br><br> hbox = wx.BoxSizer(wx.HORIZONTAL)<br><br> panel = wx.Panel(self, -1)<br><br> self.list = AutoWidthListCtrl(panel)<br> self.list.InsertColumn(0, 'Ticker')#, width=150)<br>
self.list.InsertColumn(1, 'Name')#', width=100)<br> self.list.InsertColumn(2, 'MovingAvg200')#', width=100)<br> self.list.InsertColumn(3, 'MovingAvg50')#', width=100)<br>
self.list.InsertColumn(4, 'Price')#, width=80)<br>
self.list.InsertColumn(5, 'Previous')#, width=80)<br> self.list.InsertColumn(6, 'Change')#, width=80) <br> self.list.InsertColumn(7, 'TotalValue')#, width=80)<br> self.list.InsertColumn(8, 'Position')#', width=100)<br>
<br> hbox.Add(self.list, 2, wx.EXPAND)<br> panel.SetSizer(hbox)<br> <br><br> self.SetSize((900, 500))<br> self.SetTitle('Camel App Python Gui')<br> self.Centre()<br><br> sizer = wx.GridBagSizer(vgap=8, hgap=10)<br>
# pos=(row, column) span=(rowspan, columnspan)<br> # wx.ALL puts the specified border on all sides<br> sizer.Add(self.load_button, pos=(0, 0), flag=wx.ALL, border=5)<br> # listbox spans 6 rows and 2 columns<br>
sizer.Add(self.clear_button, pos=(0, 25), flag=wx.ALL, border=5)<br><br><br> sizer.Add(self.listBox1, pos=(2, 4), span=(8, 8),<br> flag=wx.ALL|wx.EXPAND, border=5)<br><br> sizer.Add(panel, pos=(10,1),span=(10, 30),<br>
flag=wx.ALL|wx.EXPAND, border=5) <br> self.SetSizer(sizer)<br> #self.Fit()<br><br> self.Show(True)<br> <br> def OnQuit(self, e):<br> self.Close()<br><br> def OnResult(self, event):<br>
print 'onResult'<br> ptf_data = event.data<br> for item in ptf_data['portfolio']['items']:<br> index = self.list.InsertStringItem(sys.maxint, item['ticker'])<br> self.list.SetStringItem(index, 1, item['name'])<br>
self.list.SetStringItem(index, 2, str(item['movingAvg200']))<br> self.list.SetStringItem(index, 3, str(item['movingAvg50']))<br> self.list.SetStringItem(index, 4, str(item['price']))<br>
self.list.SetStringItem(index, 5, str(item['previous']))<br> self.list.SetStringItem(index, 6, str(item['price'] - item['previous']) )<br> self.list.SetStringItem(index, 7, str(item['totalValue']))<br>
self.list.SetStringItem(index, 8, str(item['position']))<br> <br><br> <br> def load_buttonClick(self,e):<br> idx = self.listBox1.GetSelections()[0]<br><br> ptf = self.listBox1.GetStrings()[idx]<br>
<br> thread.start_new_thread(self.fetch, (ptf,))<br> self.list.ClearAll() <br> <br> def fetch(self, ptf):<br> data= {'action':'portfolio', 'portfolioName':ptf}<br> ptf_data = jsonLoader.openJsonRequest(data)<br>
print ptf_data['portfolio']['cash'] <br> wx.PostEvent(self, ResultEvent(data=ptf_data)) <br><br><br>
</blockquote></div><br>