I have the following function where I am using QTimer
to update my counter
after every 1
second:
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)))
When I first press button counter
is working properly but if click button again to stop timer and then again restart, the counter value updates by 2
for every 1
second - instead it should be updated by 1
. Similarly if I again click the button to stop the counter and again restart then counter updates by 3
and so on. Where I am making mistake?
Every time you press the button you make a new connection, that is independent to the previous ones. This causes that the
counter
slot is called multiple number of times, once for each connection. From Qt's documentation:You should set up (i.e. create it and connect
timeout
to appropriate slots) the timer only once, and then onlystart
andstop
it as many times as you need.Alternatively, the simplest solution for your code is this: