我有以下功能,我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}}计数器更新,依此类推。我在哪里弄错了?
答案 0 :(得分:1)
每按一次按钮,您都会建立一个新连接,该连接与之前的连接无关。这导致counter
槽被多次调用,每次连接一次。来自Qt的documentation:
您所做的每个连接都会发出一个信号,因此重复连接会发出两个信号。您可以使用disconnect()断开连接。
您应该只设置一次(即创建它并将timeout
连接到适当的插槽)计时器,然后根据需要设置start
和stop
。< / p>
或者,对您的代码最简单的解决方案是:
#...
timer1.setInterval(1000)
timer1.disconnect() # removes previous connections
timer1.timeout.connect(lambda: self.counter(15))
timer1.start()
#...