QTimer / Python:从开始到结束计算秒数

时间:2016-05-23 06:32:32

标签: python qt qtimer

我的用户界面(Qt设计师)有一个"开始" - 按钮,一个"停止"按钮和一个lcdNumber,它应显示点击"开始&#之间的秒数34;和"停止"。 我按照那里的说明进行操作: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:没有这样的插槽MainWindow :: func() Object :: connect :(接收者名称:' MainWindow'))我并不真正了解如何在超时时使用连接信号。

如果我对此进行评论"超时" -line out,则会显示MainWindow,但单击"开始" - 按钮显然会运行" 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

3 个答案:

答案 0 :(得分:0)

您需要将QTimer作为成员变量...

而不是QtCore.QTimer.startstop | timeout)它应该是self.timer. ...

样品:

self.timer = QtCore.QTimer()
self.timer.start()
self.timer.stop()

答案 1 :(得分:0)

更新:现在计数器基本上工作,不幸的是计时器的“秒”变得太短。 有任何建议如何解决?

即使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

答案 2 :(得分:0)

更新:“秒”现在对应于实际秒数,我必须定义每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