Python Forum
Using asyncio to read text file and load GUI - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: General Coding Help (https://python-forum.io/forum-8.html)
+--- Thread: Using asyncio to read text file and load GUI (/thread-6144.html)



Using asyncio to read text file and load GUI - QueenSvetlana - Nov-08-2017

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:

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:
  1. Is my use of asyncio appropriate given that I'm reading what will be a huge text file?
  2. In my readList(self): I return a list(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?
  3. 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?




RE: Using asyncio to read text file and load GUI - heiner55 - Nov-09-2017

A file with 100+ or 1000 names is a small file.
I think you do not need async.