I have a text file with the names parsed with commas that looks like this:
Ann Marie,Smith,ams@companyname.com
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.
Problem:
How do I implement asyncio
to read the text file without blocking the main thread to load the other GUI components.
This is the best I could come up with:
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()