QTimer/Python:从开始到停止数秒
QTimer/Python: Count seconds from start to stop
我的 UI (Qt Designer) 有一个 "Start" 按钮、一个 "Stop" 按钮和一个 lcdNumber,它应该显示点击 "Start" 和点击之间的秒数"Stop"。
我按照那里的说明操作:Can't seem to get pyqt countdown timer to work
但是我的 timeout
不工作,尽管在写那行时向我建议了 connect
:QtCore.QTimer.timeout.connect(self.tick_timer) AttributeError: 'PyQt4.QtCore.pyqtSignal' 对象没有属性 'connect'
我也尝试在我的 update_timer 函数中实现类似 (QtCore.QTimer.connect(QtCore.QTimer(), QtCore.SIGNAL("timeout()"), self, QtCore.SLOT("func()"))
) 的行,但这会导致错误 (Object::connect: No such slot MainWindow::func()
Object::connect: (receiver name: 'MainWindow')) 而且我真的不明白如何使用超时连接信号。
如果我注释掉这个 "timeout"-行,主窗口出现,但是点击 "Start"-按钮显然只运行一次 "tick_timer" 函数,因为液晶显示屏显示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
您需要将 QTimer
作为成员变量...
而不是 QtCore.QTimer.start
(stop
|timeout
) 应该是 self.timer. ...
示例:
self.timer = QtCore.QTimer()
self.timer.start()
self.timer.stop()
更新:现在计数器基本可以工作了,不幸的是定时器的 "seconds" 太短了。
有什么解决方法的建议吗?
即使 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
更新:"seconds" 现在对应于真实的秒数,我必须定义 "tick" 应该每 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
我的 UI (Qt Designer) 有一个 "Start" 按钮、一个 "Stop" 按钮和一个 lcdNumber,它应该显示点击 "Start" 和点击之间的秒数"Stop"。 我按照那里的说明操作:Can't seem to get pyqt countdown timer to work
但是我的 timeout
不工作,尽管在写那行时向我建议了 connect
:QtCore.QTimer.timeout.connect(self.tick_timer) AttributeError: 'PyQt4.QtCore.pyqtSignal' 对象没有属性 'connect'
我也尝试在我的 update_timer 函数中实现类似 (QtCore.QTimer.connect(QtCore.QTimer(), QtCore.SIGNAL("timeout()"), self, QtCore.SLOT("func()"))
) 的行,但这会导致错误 (Object::connect: No such slot MainWindow::func()
Object::connect: (receiver name: 'MainWindow')) 而且我真的不明白如何使用超时连接信号。
如果我注释掉这个 "timeout"-行,主窗口出现,但是点击 "Start"-按钮显然只运行一次 "tick_timer" 函数,因为液晶显示屏显示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
您需要将 QTimer
作为成员变量...
而不是 QtCore.QTimer.start
(stop
|timeout
) 应该是 self.timer. ...
示例:
self.timer = QtCore.QTimer()
self.timer.start()
self.timer.stop()
更新:现在计数器基本可以工作了,不幸的是定时器的 "seconds" 太短了。 有什么解决方法的建议吗?
即使 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
更新:"seconds" 现在对应于真实的秒数,我必须定义 "tick" 应该每 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