PyQt,尝试制作LCD倒计时小部件
我正在做一个项目,需要编写一个电梯“模拟器”。这是我第一次使用Python和PyQt,所以遇到了一些困难。
目前我有两个类,一个是电梯类,另一个是liftUI类,里面有一个QLCDNumber小部件。我已经设置好电梯类,可以把当前楼层和目标楼层的数字发送到liftUI类。我原本想用一个循环,让LCD显示的数字一直变化,直到当前楼层和目标楼层相同,但这样程序就卡住了,我只能强制关闭。
这是我现在的代码:
def lcdFloorNum(self, floorNum, curFloor):
if floorNum <= curFloor:
while floorNum <= curFloor:
self.ui.floorNumber.setProperty("value", floorNum)
floorNum -= 1
这段代码只是针对电梯下降的情况,等这部分能正常工作后,我会再做“上升”的部分……
它从电梯类的另一个函数获取floorNum和curFloor,我觉得那部分应该没问题。如果我去掉循环,数字会更新,但只会更新一次,而不是一直更新到最后。
有没有什么更好的代码可以实现我想要的效果,而不会让界面卡住呢?
2 个回答
1
我觉得你是想让 curFloor
减少对吧?你的 while 循环是 while floorNum <= curFloor:
。如果你让 floorNum
减少的话,这个条件永远都会成立。
1
除了这里提到的其他问题,你的代码在用户界面上显示的数字变化得太快了,中间没有任何时间间隔(实际上也没有让界面更新),所以你会发现它“倒计时”得太快,根本看不清楚。
一个更好的方法是使用 QTimer,这样你可以模拟,比如每秒下降一层楼或者类似的效果。可以看看 QTimer 和信号/槽机制。我在这里找到一个小的 PyQT 示例:http://www.rkblog.rk.edu.pl/w/p/qtimer-making-timers-pyqt4/