Nov-08-2017, 02:39 AM
Goal: Using wxPython, load a combo box and read in a potentially huge text file to add to the list.
I have a text file with the names parsed with commas that looks like this:
The list could have over 100+ names in it. I left out the code that generates all the other GUI components to focus on loading the combobox and the items.
I have a text file with the names parsed with commas that looks like this:
Ann Marie,Smith,[email protected]
The list could have over 100+ names in it. I left out the code that generates all the other GUI components to focus on loading the combobox and the items.
import wx import asyncio class Mywin(wx.Frame): def __init__(self, parent, title): super(Mywin, self).__init__(parent, title=title, size=(300, 200)) self.panel = wx.Panel(self) box = wx.BoxSizer(wx.VERTICAL) self.eventloop() box.Add(self.combo, 1, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, 5) box.AddStretchSpacer() self.panel.SetSizer(box) self.Centre() self.Show() #code to display and position GUI components left out async def readlist(self): filename = 'employees.txt' empList = [] with open(filename) as f_obj: for line in f_obj: empList.append(line) return empList async def managecombobox(self, loop): task = loop.create_task(self.readlist()) return_value = await task self.combo = wx.ComboBox(self.panel, choices=return_value) def eventloop(self): event_loop = asyncio.get_event_loop() try: event_loop.run_until_complete(self.managecombobox(event_loop)) finally: event_loop.close() def OnCombo(self, event): self.label.SetLabel("You selected" + self.combo.GetValue() + " from Combobox") app = wx.App() Mywin(None, 'ComboBox Demo') app.MainLoop()Questions:
- Is my use of asyncio appropriate given that I'm reading what will be a huge text file?
- In my
readList(self):
I return alist(empList)
of the employees. I understand that lists aren't thread-safe. In the way that I used it, is it okay? If not, what should be done?
- In my
managecombobox(self, loop)
I set the combobox component. I understand that GUI components are not thread-safe as well. Is setting the combo box with returned list(i.e.return_value
) okay?