QTimer的奇怪行为

时间:2013-12-13 12:40:30

标签: python pyqt qtimer

我有以下功能,我QTimer每隔counter秒后使用1更新def somefunc(): if self.pushButton_13.text() == 'OFF': self.pushButton_13.setText('ON') timer1.setInterval(1000) #timer1 is global variable timer1.timeout.connect(lambda: self.counter(15)) timer1.start() else: self.pushButton_13.setText('OFF') timer1.stop() print timer1.timerId() def counter(self, var): if var == 15: count = int(str(self.lineEdit_15.text())) count = count + 1 print count self.lineEdit_15.setText(QtCore.QString(str(count)))

counter

当我第一次按下按钮2工作正常但如果再次单击按钮停止计时器然后再次重启,则计数器值每1秒更新1 - 而不是应由3更新。同样,如果我再次单击按钮以停止计数器并再次重新启动,则按{{1}}计数器更新,依此类推。我在哪里弄错了?

1 个答案:

答案 0 :(得分:1)

每按一次按钮,您都会建立一个新连接,该连接与之前的连接无关。这导致counter槽被多次调用,每次连接一次。来自Qt的documentation

  

您所做的每个连接都会发出一个信号,因此重复连接会发出两个信号。您可以使用disconnect()断开连接。

您应该只设置一次(即创建它并将timeout连接到适当的插槽)计时器,然后根据需要设置startstop。< / p>

或者,对您的代码最简单的解决方案是:

        #...
        timer1.setInterval(1000)  
        timer1.disconnect()       # removes previous connections
        timer1.timeout.connect(lambda: self.counter(15))
        timer1.start()
        #...