[Tutor] Segmentation Fault shenanigans with wx Gui

Prasad, Ramit ramit.prasad at jpmorgan.com
Mon Oct 22 18:58:44 CEST 2012

Marco Mistroni wrote:
> 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?

I think the problem is the way you populate the data. The issue
with ClearAll is a side effect of that. See below for more information.

> wkr
>  marco
> On Fri, Oct 19, 2012 at 11:05 PM, Marco Mistroni <mmistroni at 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
>     self.list = AutoWidthListCtrl(panel)'

This mailing list is for learning Python. Support and familiarity 
with 3rd party packages is limited. You will probably be better off
asking the wxpython mailing list. Especially as the AutoWidthListCtrl
is not a widget that comes with wxpython. 

>     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'])

I believe this is the source of your problem. You are using the
incorrect value as the index. If you look at documentation for
the base class ListCtrl [0][1] you will notice that the first 
argument to InsertStringItem is the insertion index. Instead you are
using the same value (sys.maxint) for all items you are inserting.
sys.maxint represents the maximum integer supported by the system
and is not relevant for what you are trying to do. Instead use an
incrementing count. 

     rows = self.list.GetItemCount()
     for index, item in enumerate( ptf_data['portfolio']['items'], rows ):
         self.list.InsertStringItem(index, item['ticker'])

 [0]: http://wiki.wxpython.org/ListControls
[1]: http://www.wxpython.org/docs/api/wx.ListCtrl-class.html 

>         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']))

Do let us know if the suggestion works or not.

Ramit Prasad

This email is confidential and subject to important disclaimers and
conditions including on offers for the purchase or sale of
securities, accuracy and completeness of information, viruses,
confidentiality, legal privilege, and legal entity disclaimers,
available at http://www.jpmorgan.com/pages/disclosures/email.  

More information about the Tutor mailing list