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