秒表(计时器)不起作用

时间:2016-01-01 21:10:33

标签: python pyqt

我使用库pyqt在python中制作一个秒表(chronometre),但是当我按下重置按钮然后按下开始按钮时我有一个问题,我看到时间增加了两个,并重复我看到增加的过程三分之一等等。    我不明白为什么会这样。我希望有些人可以帮助我。    这是代码:

# -*- coding: utf-8 -*-

import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *
from PyQt4 import uic


class Cronometro(QWidget):

    def __init__(self):
        QWidget.__init__(self)
        uic.loadUi("cronometro.ui", self)

        self.sec = 0
        self.timer = QTimer()

        self.set_time()

        # Conexion
        self.btnStart.clicked.connect(self.start)
        self.btnReset.clicked.connect(self.reset)
        self.btnExit.clicked.connect(self.close)

    def start(self):
        self.timer.timeout.connect(self.counter)
        self.timer.start(1000)

    def reset(self):
        self.timer.stop()
        self.sec = 0

    def counter(self):
        self.sec += 1
        self.set_time()

    def is_timer_active(self):
        return self.timer.isActive()

    def set_time(self):
        hora = self.sec / 3600
        minutos = (self.sec % 3600) / 60
        segundos = (self.sec % 3600) % 60
        self.label.setText("%02d:%02d:%02d" % (hora, minutos, segundos))


app = QApplication(sys.argv)
ventana = Cronometro()
ventana.show()
sys.exit(app.exec_())

非常感谢!!!

1 个答案:

答案 0 :(得分:3)

问题在于start方法:

    def start(self):
        self.timer.timeout.connect(self.counter)
        self.timer.start(1000)

每次启动计时器时,都会将计时器的timeout信号连接到counter方法。因此,如果您启动计时器两次,则计时器与counter方法之间存在两个连接,因此计时器的每个滴答都会调用计数器方法两次。

修复非常简单:移动线

        self.timer.timeout.connect(self.counter)

进入__init__方法,以便连接只进行一次。