• 100001 по три и так далее. Не понимаю, почему так происходит. Я надеюсь, что некоторые могут мне помочь. Это код:

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

Большое спасибо !!!

Mario Ferreyra

Ответов: 1

Ответы (1)

Проблема здесь, в вашем методе start:

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

Каждый раз, когда вы запускаете таймер, вы подключаете сигнал таймера timeout к вашему методу counter. Итак, если вы запускаете таймер дважды, будет два соединения от таймера к вашему методу counter, поэтому метод счетчика вызывается дважды при каждом такте таймера.

Исправить довольно просто: переместить линию

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

в ваш метод __ init __, так что соединение когда-либо устанавливается только один раз.

2022 WebDevInsider