QTimer/Python: считать секунды от начала до остановки
Мой пользовательский интерфейс (Qt Designer) имеет кнопку "Пуск", кнопку "Стоп" и lcdNumber, которые должны отображать секунды между нажатием "Пуск" и "Стоп". Я следовал инструкциям там: не могу заставить работать таймер обратного отсчета pyqt
Но мой timeout
не работает, хотя connect
было предложено мне при написании этой строки: QtCore.QTimer.timeout.connect(self.tick_timer) AttributeError: 'PyQt4.QtCore.pyqtSignal' объект не имеет атрибута 'connect'
Я тоже пытался реализовать такие строки (QtCore.QTimer.connect(QtCore.QTimer(), QtCore.SIGNAL("timeout()"), self, QtCore.SLOT("func()"))
) в моей функции update_timer, но это вызывает ошибки (Object::connect: такого слота нет MainWindow::func()
Object::connect: (имя получателя: 'MainWindow')), и я не совсем понимаю, как использовать подключить сигнал с тайм-аутом.
Если я прокомментирую эту строку "timeout", появится MainWindow, но нажатие кнопки "Start", очевидно, запускает функцию "tick_timer" только один раз, потому что на lcd-дисплее отображается 0:01.
Спасибо за вашу помощь!
from PyQt4 import QtCore, QtGui, uic
class MainWindow(QtGui.QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
uic.loadUi('MainWindow.ui', self)
# Buttons
self.QStartButton.clicked.connect(self.start_timer)
self.QStopButton.clicked.connect(self.stop_timer)
# Timer
QtCore.QTimer.timeout.connect(self.tick_timer)
def start_timer(self):
self.now = 0
self.tick_timer()
QtCore.QTimer.start
def update_timer(self):
self.runtime = "%d:%02d" % (self.now/60,self.now % 60)
self.lcdNumber.display(self.runtime)
def tick_timer(self):
self.now += 1
self.update_timer()
def stop_timer(self):
QtCore.QTimer.stop
3 ответа
Обновление: "секунды" теперь соответствуют реальным секундам, я должен был определить, что "тик" должен происходить каждые 1000 мсек: self.timer.start(1000)
from PyQt4 import QtCore, QtGui, uic
class MainWindow(QtGui.QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
uic.loadUi('MainWindow.ui', self)
# Buttons
self.QStartButton.clicked.connect(self.start_timer)
self.QStopButton.clicked.connect(self.stop_timer)
def start_timer(self):
# Initialize timer
self.timer = QtCore.QTimer()
self.now = 0
# Update display and start timer
self.update_timer()
self.timer.timeout.connect(self.tick_timer)
self.timer.start(1000) # Duration of one second = 1000 msec
def update_timer(self):
self.runtime = "%d:%02d" % (self.now/60,self.now % 60)
self.lcdNumber.display(self.runtime)
def tick_timer(self):
self.now += 1
self.update_timer()
def stop_timer(self):
self.timer.stop
Вам нужно иметь QTimer
как переменная-член...
вместо QtCore.QTimer.start
(stop
|timeout
) так должно быть self.timer. ...
образец:
self.timer = QtCore.QTimer()
self.timer.start()
self.timer.stop()
Обновление: теперь счетчик в основном работает, к сожалению, "секунды" таймера слишком коротки. Любые предложения, как это исправить?
Четное self.timer = QtCore.QTimer()
теперь работает в функции start_timer, без self.timer.timeout.connect(self.tick_timer)
это не так.
Спасибо за вашу помощь!
from PyQt4 import QtCore, QtGui, uic
class MainWindow(QtGui.QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
uic.loadUi('MainWindow.ui', self)
# Buttons
self.QStartButton.clicked.connect(self.start_timer)
self.QStopButton.clicked.connect(self.stop_timer)
def start_timer(self):
# Initialize timer
self.timer = QtCore.QTimer()
self.now = 0
self.timer.timeout.connect(self.tick_timer)
# Start timer and update display
self.timer.start()
self.update_timer()
def update_timer(self):
self.runtime = "%d:%02d" % (self.now/60,self.now % 60)
self.lcdNumber.display(self.runtime)
def tick_timer(self):
self.now += 1
self.update_timer()
def stop_timer(self):
self.timer.stop