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 在指定的时间间隔内更新?