[Tutor] Segmentation Fault shenanigans with wx Gui
ramit.prasad at jpmorgan.com
Mon Oct 22 18:58:44 CEST 2012
Marco Mistroni wrote:
> 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
> 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.
> 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  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
rows = self.list.GetItemCount()
for index, item in enumerate( ptf_data['portfolio']['items'], rows ):
> 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.
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