我使用库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_())
非常感谢!!!
答案 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__
方法,以便连接只进行一次。