【发布时间】:2015-06-02 19:20:54
【问题描述】:
我在使用 pyqt5 QTimer 类和 OSX 时遇到问题。
如果通过单击窗口左上角的黄色按钮将以下简单应用程序最小化,则应用程序会按预期移动到停靠栏的右下角,并且计时器每秒都会增加。
奇怪的是,在大约 2:30 分钟后,计时器会大大减慢计数,假设每 10 秒一次。我怀疑这与 OSX 下的“冻结”或“睡眠”模式有关?
我想要的是一个可靠的计时器,它每秒计数。 pyqt下有什么我遗漏的技巧吗?
---- 编辑----
如果窗口失去焦点,也会发生这种情况。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import time
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt, QTimer, pyqtSlot
class Main(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.seconds = 0
self.init_ui()
def init_ui(self):
self.timer = QTimer()
self.timer.setInterval(1000)
self.timer.setTimerType(Qt.PreciseTimer)
self.timer.timeout.connect(self.on_timer)
self.timer.start()
@pyqtSlot()
def on_timer(self):
self.seconds += 1
print(time.strftime("%H:%M:%S", time.gmtime(self.seconds)))
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
screen = Main()
screen.show()
sys.exit(app.exec_())
我的系统的一些信息:
Python: 3.4.3
PyQt: 5.4.0
OSX: 10.9.5
uname -a: Darwin mac-pro 13.4.0 Darwin Kernel Version 13.4.0: Wed Mar 18 16:20:14 PDT 2015; root:xnu-2422.115.14~1/RELEASE_X86_64 x86_64
【问题讨论】:
-
目前我发现的是一个 ThreadsafeTimer 类表单github.com/robertsj/poropy/blob/master/pyqtgraph/…。但这仍然行不通。我认为这可能与我作为 GUI 程序员的技能有关。