Pyqt5 Qtimer的理解

Pyqt5 Qtimer understanding

这是一个需要理解的问题QTimer。我创建了一个 QTimer() 事件,每 1000 毫秒 运行 一个函数。只要 GUI 运行ning,此功能就会持续。因此,我在主线程(GUI 线程)中使用了 QTimer(),而没有为此计时器事件创建 QThread。我的问题是:

1- 是否在 GUI 线程(主线程)中使用 QTimer,随时影响 GUI 的功能?

2- 你建议在上面创建一个QThread和运行这个定时器事件吗,还是不值得,比较节省资源。如果是,你能告诉我如何将这个计时器移动到 QThread 吗?

  1. 如果要执行一个周期性的任务那么QTimer是最好的选择,QTimer的逻辑是利用Qt的事件循环判断是否触发。相反,您应该担心 QTimer 执行的功能,因为通常任何连接到信号的功能都不会非常耗时,这是开发人员的任务。

  2. 一般来说,您应该尽可能避免使用线程,因为它们会增加更多的复杂性并可能带来更多的问题。所以线程是替代方案的唯一原因是当任务非常耗时时。总结:使用或不使用线程不取决于QTimer,而是取决于你正在执行的任务。

如果您要执行周期性任务,那么有很多选择(不仅是 QThread),但功能取决于特定任务:

  • threading.Timer

  • 创建一个驻留在副线程中的QObject并使用QTimer调用它(这里的条件是任务时间远小于QTimer周期)

  • 使用 QThreadPool 启动带有 QTimer 的 QRunnable(QThreadPool 可以激活最大数量的可运行对象)

Edwin 的回答是最好的,但我会向您推荐我几周前解决的一个问题: Python Timer Threading not Terminating using Desktop Shortcut