我在网上搜索了好几天,但我能想出如何把这段代码付诸实施。这是一个非常简单的gui(在Qt设计器上制作),有一个lcd和一个按钮。我要它按一下按钮,从180秒开始倒计时。在第一时间,我能够使按钮减少一个值,但在尝试了这么多不同的事情后,没有任何工作。有人能帮帮我吗?可能是很简单的事情。谢谢您。在
# -*- coding: utf-8 -*-
import sys
import time
from PyQt4 import QtCore, QtGui
from relogio import Ui_relogiocc
class StartQT4(QtGui.QMainWindow):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.ui = Ui_relogiocc()
self.ui.setupUi(self)
self.timer = QtCore.QTimer()
text = "%d:%02d" % (180/60,180 % 60)
self.ui.QLCDNumber.display(text)
self.timer.start(1000)
self.ui.iniciar.clicked.connect(self.updateTimerDisplay)
def updateTimerDisplay(self):
self.inicio = 180
while self.inicio != 0:
text = "%d:%02d" % (self.inicio/60,self.inicio % 60)
self.ui.QLCDNumber.display(text)
self.inicio - 1
else:
self.timer.stop()
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
myapp = StartQT4()
myapp.show()
sys.exit(app.exec_())
正如其他答案所说,你的代码包含一些明显的错误。这里有一个完整的工作示例(UI不是通过Designer创建的),它可以在每次单击按钮时正确地重置计数器(即在再次启动计时器之前停止计时器)。如果您不这样做,并在计时器停止之前单击
Start
按钮,那么每次单击按钮计数器都会更快地计数)。在看来你在这里遗漏了很多东西。在
首先,每当每个超时周期结束时,计时器都会发出
timeout()
信号。对你来说,这是每一秒。但是,你不能把这个信号和任何东西联系起来。在其次,您的
updateTimerDisplay
包含以下行:这将读取
self.inicio
的值,从中减去1,然后丢弃结果。因为self.inicio
的值不会改变updateTimerDisplay
方法进入一个无限循环。在我猜你是说
^{pr2}$相反,它将
self.inicio
的新值赋回自身。在不过,最终看来您是在尝试使用
updateTimerDisplay
方法来启动计时器、倒计时并更新计时器的显示。我建议把这个方法分解成更小的方法。在首先,
updateTimerDisplay
应该只更新计时器的显示:其次,你需要一个方法来启动计时器。如下所示:
当然,您还需要将
iniciar
按钮的clicked()
信号连接到此函数,而不是连接到updateTimerDisplay
。在最后,您需要一个方法来处理计时器的滴答声。如下所示:
您还需要将计时器的
timeout()
信号连接到此函数,方法如下:您的代码有多处错误。首先,您编写了
self.inicio - 1
而不是-= 1
,而且您从未实际使用您创建的Qtimer
。但是忽略了这一点,你的程序结构是不正确的:目前你调用updateTimerDisplay
当用户点击你的iniciar
按钮时,你会在那里循环,直到你的倒计时为零。您要做的是在用户单击按钮时启动计时器,并将计时器(实际上是它的timeout
信号)连接到一个只倒数一秒并更新显示的方法:更改您的
^{pr2}$__init__
方法,如下所示连接这些函数:相关问题 更多 >
编程相关推荐