0

エレベーター「シミュレーター」をプログラムする必要があるプロジェクトに取り組んでいます。初めて python と pyqt を使用していますが、問題があります。現時点では、2 つのクラスがあります。1 つはエレベーター クラス、もう 1 つは 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 ループを取り除くと、最後までではなく、1 回だけ数値が更新されます。GUIをフリーズさせない、私が望むものを達成するためのより良いコードはありますか?

4

2 に答える 2

1

ここで言及されている他の問題に加えて、あなたのコードは、UI に表示される数字を、ステップの間に時間をかけずに (実際には GUI の更新を許可せずに) 変更しているため、表示できない速さで「カウントダウン」します。それ。

より良いアプローチは、QTimer を使用してシミュレートできるようにすることです。たとえば、1 秒ごとに 1 フロア下がるなどです。QTimer とシグナル/スロット メカニズムを見てください。ここでこれの小さな PyQT の例を見つけました: http://www.rkblog.rk.edu.pl/w/p/qtimer-making-timers-pyqt4/

于 2011-08-12T20:03:30.043 に答える
1

減らしたいと思いますcurFloorよね?while ステートメントはwhile floorNum <= curFloor:. を減分floorNumすると、そのステートメントは常に真になります。

于 2011-08-12T13:54:59.270 に答える