2016-01-01 53 views
1

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

# -*- 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_()) 

非常感谢!

回答

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__方法,使连接只做过一次。

+0

谢谢你的帮助! –