PyQt: app.exec_() stops all following code from running

That is intended. What you have to do is use signals/slots, code inside your Qt classes, or spawn off threads before you call app.exec().

Signals and slots are your defacto way of interacting with Qt. Basically a signal is any “event” or custom “event” and slots can be thought of as “event handlers”. For instance when someone hits a button on a GUI it creates a signal that seeks out any handler that is connected to it. You can connect none, one, or many slots to each signal (you can even connect the same one multiple times)! Here is a good reference for this in python.

Coding inside your Qt classes usually means creating slots that do useful work for you. Remember you don’t want to hold up the event loop too long so spawn a new thread if you do this.

The third option available to you is to spin off other threads. Be careful interacting with Qt from threads, if you do you MUST us signals and slots. Implement threading as suggested in this SO.

Leave a Comment