PyQt,尝试制作LCD倒计时小部件

0 投票
2 回答
1620 浏览
提问于 2025-04-16 23:28

我正在做一个项目,需要编写一个电梯“模拟器”。这是我第一次使用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/

撰写回答