0

我有一个项目正在做,我必须对电梯“模拟器”进行编程。我第一次使用 python 和 pyqt 并且遇到了一些困难。目前我有 2 个类,一个是电梯类,另一个是具有 QLCDNumber 小部件的 liftUI 类。我设置了电梯类以将当前楼层和目标楼层号发送到 liftUI 类,所以我想我可以使用一个 while 循环来更改 lcd 值,直到当前楼层和目标楼层相同,但它只是冻结,我必须强制关闭。

这是我目前拥有的代码:

    def lcdFloorNum(self, floorNum, curFloor):
    if floorNum <= curFloor:
        while floorNum <= curFloor:
            self.ui.floorNumber.setProperty("value", floorNum)
            floorNum -= 1

这仅适用于当电梯明显下降时,一旦它工作,我会“上升”......它从电梯类中的另一个函数获取 floorNum 和 curFloor,我很确定它工作正常。如果我摆脱了 while 循环,它会更新数字,只更新一次,直到最后。有没有更好的代码来实现我想要的不会冻结 GUI 的东西?

4

2 回答 2

1

我想你想减少curFloor是不是?您的 while 语句是while floorNum <= curFloor:. 如果您递减floorNum,则该陈述将始终正确。

于 2011-08-12T13:54:59.270 回答
1

除了此处提到的其他问题之外,您的代码正在更改 UI 中显示的数字,而步骤之间没有任何时间(实际上不允许 GUI 更新),因此它会“倒计时”如此之快,以至于您看不到它。

更好的方法可能是使用 QTimer 以便您可以模拟,例如每秒下一层楼或类似情况。看看 QTimer 和信号/槽机制。我在这里找到了一个小的 PyQT 示例:http ://www.rkblog.rk.edu.pl/w/p/qtimer-making-timers-pyqt4/

于 2011-08-12T20:03:30.043 回答