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>