Hi again - thought I'd offer a quick update. I had to leave this for a week or so due to other commitments, so tonight has been my first night back on it. I got rid of the infinite loops which were stopping Qt's event loop from happening and had a similar problem - turns out it was due to blocking sockets. I couldn't get non blocking sockets to work in Python with the couple of hours playing I have it (I realise select is one direction I should be looking in); there's actually a surprising lack of information about on this. Another option open to me, I guess, are threads - but I didn't want to have the trade off of added complexity, so for now I've avoided that route.

Anyway, to cut a long story short, I've set up a QTimer that calls a socket and buffer checking function every 50ms, and have set the sockets to have very low timeouts after the initial connection to a server. It's a nasty hack, and I'll come back to it, but at least for the moment it allows me to move on and solves the problem I was having - no more GUI lockups, and instant incoming data retrieval. I can only think of the grimace you experienced guys must have thinking about this solution... but anyway, I'd just like to say thanks for all of your help. No doubt I'll be back!