【问题标题】:QTimer/Python: Count seconds from start to stopQTimer/Python:计算从开始到停止的秒数
【发布时间】:2016-05-23 06:32:31
【问题描述】:

我的 UI(Qt 设计器)有一个“开始”按钮、一个“停止”按钮和一个 lcdNumber,它应该显示单击“开始”和“停止”之间的秒数。 我按照那里的说明进行操作:Can't seem to get pyqt countdown timer to work

但是我的timeout 不起作用,尽管在编写该行时向我提出了connect:QtCore.QTimer.timeout.connect(self.tick_timer) AttributeError: 'PyQt4.QtCore.pyqtSignal' object has no属性“连接”

我也尝试在我的 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')) 我真的不明白如何使用超时连接信号。

如果我注释掉这个“超时”行,主窗口就会出现,但单击“开始”按钮显然只运行一次“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

【问题讨论】:

    标签: python qt qtimer


    【解决方案1】:

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

    应该是self.timer. ...而不是QtCore.QTimer.start(stop|timeout)

    样本:

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

    【讨论】:

    • 我必须在每个函数中插入self.timer = QtCore.QTimer(),还是只在其中一个函数中插入?目前这一行只是在 start_timer 函数中,其他函数都在抱怨: AttributeError: 'MainWindow' object has no attribute 'timer'
    【解决方案2】:

    更新:现在计数器基本上可以工作了,不幸的是计时器的“秒”太短了。 有什么建议可以解决吗?

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

    【讨论】:

      【解决方案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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-22
        • 1970-01-01
        • 2020-12-09
        • 1970-01-01
        • 1970-01-01
        • 2016-05-30
        相关资源
        最近更新 更多