Skip to content
Advertisement

How to call a function periodically while my MainWindow is active?

I have tried doing it with multiprocessing module to no avail. I get the following error:

TypeError: cannot pickle ‘MainWindow’ object

JavaScript

Advertisement

Answer

the proper way to do this is to not use any sort of parallel mechanism, instead use QTimer.singleshot, as QT doesn’t work well with multiprocessing or threading, and if you want to repeat it then you can just connect the function to a Qtimer.timeout signal and set the timer on repeat using Qtimer.start() as in this tutorial

JavaScript

Edit: to clarify on working with threads and multiprocessing, if you use multiprocessing for example there are many precautions, such as putting an if __name__ == "__main__": guard on your code, and not use anything that belong to QT inside the subprocesses, and just use it for running things that don’t need QT, like reading files and doing calculations.

as for threading, using any QWidget object in another thread other than your main application thread is going to crash your application, you can emit signals from child threads for signaling, but you cannot update the GUI on another thread, so only use QT objects that don’t touch the GUI inside threads. (like networking, reading files, and sharing the CPU for extra calculations)

User contributions licensed under: CC BY-SA
4 People found this is helpful
Advertisement