QTimer/Python:从开始到停止数秒

QTimer/Python: Count seconds from start to stop

我的 UI (Qt Designer) 有一个 "Start" 按钮、一个 "Stop" 按钮和一个 lcdNumber,它应该显示点击 "Start" 和点击之间的秒数"Stop"。 我按照那里的说明操作:Can't seem to get pyqt countdown timer to work

但是我的 timeout 不工作,尽管在写那行时向我建议了 connect:QtCore.QTimer.timeout.connect(self.tick_timer) AttributeError: 'PyQt4.QtCore.pyqtSignal' 对象没有属性 'connect'

我也尝试在我的 update_timer 函数中实现类似 (QtCore.QTimer.connect(QtCore.QTimer(), QtCore.SIGNAL("timeout()"), self, QtCore.SLOT("func()"))) 的行,但这会导致错误 (Object::connect: No such slot MainWindow::func() Object::connect: (receiver name: 'MainWindow')) 而且我真的不明白如何使用超时连接信号。

如果我注释掉这个 "timeout"-行,主窗口出现,但是点击 "Start"-按钮显然只运行一次 "tick_timer" 函数,因为液晶显示屏显示0:01.

感谢您的帮助!

from PyQt4 import QtCore, QtGui, uic

class MainWindow(QtGui.QMainWindow):

    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        uic.loadUi('MainWindow.ui', self)
        # Buttons
        self.QStartButton.clicked.connect(self.start_timer)
        self.QStopButton.clicked.connect(self.stop_timer)
        # Timer
        QtCore.QTimer.timeout.connect(self.tick_timer)

    def start_timer(self):
        self.now = 0
        self.tick_timer()
        QtCore.QTimer.start

    def update_timer(self):
        self.runtime = "%d:%02d" % (self.now/60,self.now % 60)
        self.lcdNumber.display(self.runtime)

    def tick_timer(self):
        self.now += 1
        self.update_timer()

    def stop_timer(self):
        QtCore.QTimer.stop

您需要将 QTimer 作为成员变量...

而不是 QtCore.QTimer.start(stop|timeout) 应该是 self.timer. ...

示例:

self.timer = QtCore.QTimer()
self.timer.start()
self.timer.stop()

更新:现在计数器基本可以工作了,不幸的是定时器的 "seconds" 太短了。 有什么解决方法的建议吗?

即使 self.timer = QtCore.QTimer() 现在可以在 start_timer 函数中使用,没有 self.timer.timeout.connect(self.tick_timer) 就不行。

感谢您的帮助!

from PyQt4 import QtCore, QtGui, uic

class MainWindow(QtGui.QMainWindow):

    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        uic.loadUi('MainWindow.ui', self)
        # Buttons
        self.QStartButton.clicked.connect(self.start_timer)
        self.QStopButton.clicked.connect(self.stop_timer)

    def start_timer(self):
        # Initialize timer
        self.timer = QtCore.QTimer()
        self.now = 0
        self.timer.timeout.connect(self.tick_timer)
        # Start timer and update display
        self.timer.start()
        self.update_timer()


    def update_timer(self):
        self.runtime = "%d:%02d" % (self.now/60,self.now % 60)
        self.lcdNumber.display(self.runtime)

    def tick_timer(self):
        self.now += 1
        self.update_timer()

    def stop_timer(self):
        self.timer.stop

更新:"seconds" 现在对应于真实的秒数,我必须定义 "tick" 应该每 1000 毫秒发生一次:self.timer.start(1000)

from PyQt4 import QtCore, QtGui, uic

class MainWindow(QtGui.QMainWindow):

    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        uic.loadUi('MainWindow.ui', self)
        # Buttons
        self.QStartButton.clicked.connect(self.start_timer)
        self.QStopButton.clicked.connect(self.stop_timer)

    def start_timer(self):
        # Initialize timer
        self.timer = QtCore.QTimer()
        self.now = 0
        # Update display and start timer
        self.update_timer()
        self.timer.timeout.connect(self.tick_timer)
        self.timer.start(1000) # Duration of one second = 1000 msec

    def update_timer(self):
        self.runtime = "%d:%02d" % (self.now/60,self.now % 60)
        self.lcdNumber.display(self.runtime)

    def tick_timer(self):
        self.now += 1
        self.update_timer()

    def stop_timer(self):
        self.timer.stop