Pyqt5 Qtimer理解

Posted

技术标签:

【中文标题】Pyqt5 Qtimer理解【英文标题】:Pyqt5 Qtimer understanding 【发布时间】:2020-05-08 19:55:19 【问题描述】:

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

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

2- 是否建议创建QThread 并在其上运行此计时器事件,否则不值得,最好节省资源。如果是,您能否告诉我如何将此计时器移至QThread

【问题讨论】:

【参考方案1】:

    如果要执行周期性任务,那么QTimer是最好的选择,QTimer的逻辑是使用Qt事件循环来检查它是否触发。相反,您应该担心 QTimer 执行的函数,因为通常任何连接到信号的函数都不应该非常耗时,这是开发人员的任务。

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

如果您要执行周期性任务,那么有很多替代方案(不仅是 QThread),但功能取决于具体任务:

threading.Timer

创建一个生活在辅助线程中的QObject,并使用QTimer调用它(这里的条件是任务时间远小于QTimer周期)

使用 QThreadPool 启动 QRunnable 和 QTimer(QThreadPool 可以有最大数量的可运行的活动)

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于Pyqt5 Qtimer理解的主要内容,如果未能解决你的问题,请参考以下文章

七.PyQt5定时器QTimer的使用

PyQt5:最小化窗口后 QTimer 不同步(OSX)

如何设置 PyQt5 Qtimer 在指定的时间间隔内更新?

QTimer 不调用该方法来为绘图设置动画

在 QTimer Singleshot 之后终止 QThread

卷积神经网络实战——表情识别(Pytorch)超详细理解,含Pyqt5的可操作界面