<p>看来你在这里遗漏了很多东西。在</p>
<p>首先,每当每个超时周期结束时,计时器都会发出<code>timeout()</code>信号。对你来说,这是每一秒。但是,你不能把这个信号和任何东西联系起来。在</p>
<p>其次,您的<code>updateTimerDisplay</code>包含以下行:</p>
<pre><code> self.inicio - 1
</code></pre>
<p>这将读取<code>self.inicio</code>的值,从中减去1,然后丢弃结果。因为<code>self.inicio</code>的值不会改变<code>updateTimerDisplay</code>方法进入一个无限循环。在</p>
<p>我猜你是说</p>
^{pr2}$
<p>相反,它将<code>self.inicio</code>的新值赋回自身。在</p>
<p>不过,最终看来您是在尝试使用<code>updateTimerDisplay</code>方法来启动计时器、倒计时并更新计时器的显示。我建议把这个方法分解成更小的方法。在</p>
<p>首先,<code>updateTimerDisplay</code>应该只更新计时器的显示:</p>
<pre><code> def updateTimerDisplay(self):
text = "%d:%02d" % (self.inicio/60,self.inicio % 60)
self.ui.QLCDNumber.display(text)
</code></pre>
<p>其次,你需要一个方法来启动计时器。如下所示:</p>
<pre><code> def startTimer(self):
self.inicio = 180
self.updateTimerDisplay()
self.timer.start(1000)
</code></pre>
<p>当然,您还需要将<code>iniciar</code>按钮的<code>clicked()</code>信号连接到此函数,而不是连接到<code>updateTimerDisplay</code>。在</p>
<p>最后,您需要一个方法来处理计时器的滴答声。如下所示:</p>
<pre><code> def timerTick(self):
self.inicio -= 1
self.updateTimerDisplay()
if self.inicio <= 0:
self.timer.stop()
</code></pre>
<p>您还需要将计时器的<code>timeout()</code>信号连接到此函数,方法如下:</p>
<pre><code> self.timer.timeout.connect(self.timerTick)
</code></pre>