[Tutor] Segmentation Fault shenanigans with wx Gui

Marco Mistroni mmistroni at gmail.com
Sat Oct 20 00:10:53 CEST 2012


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 <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
>
> 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))
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20121019/c19cf483/attachment-0001.html>


More information about the Tutor mailing list