2011-08-12 18 views
0

私は私がエレベータ「シミュレータ」をプログラムしなければならないところに取り組んでいるプロジェクトを持っています。私はpythonとpyqtを初めて使用していて、いくつかの難しさがあります。 私は2つのクラスを持つ瞬間、1つはエレベータークラス、もう1つはQLCDNumberウィジェットを持つliftUIクラスです。現在の階と目的地階数をliftUIクラスに送信するようにエレベータクラスを設定しましたので、現在の階と目的階が同じになるまでlcd値を変更するためにwhileループを使用することができます凍結し、私は強制的に閉じる必要があります。ここでPyQt、LCD Qtウィジェットのカウントダウンをしようとしています

は、現時点で私が持っているコードです:

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

これはエレベーターは明らかに下がっているとき、私はこの作品たら、「上がって」やるだけのためのものです... それを取得します私がかなり確信しているエレベータークラスの別の関数のfloorNumとcurFloorは正常に動作しています。私がwhileループを取り除くと、それは数が一度だけ更新され、最後まで更新されません。 GUIがフリーズしないようにしたいという目的を達成するためのコードがありますか?

+0

実際のコードのインデントは正しいと思いますか?つまりif文とそれ以下のすべてがインデントの1つのレベルです。 – bdeniker

答えて

1

私はあなたが減少したいと思うと思いますcurFloor?あなたのwhileステートメントはwhile floorNum <= curFloor:です。 floorNumを減らすと、そのステートメントは常にtrueになります。

1

ここで言及されている他の問題に加えて、コードでは、ステップ間に時間を置かずにUIに表示される数字が変更されているため(実際にはGUIを更新せずに)それを見ることはできません。

QTimerを使用して、シミュレーションすることができます。毎秒1フロア降りるか、それと同様です。 QTimerとシグナル/スロットのメカニズムを見てください。私はここに小さなPyQTの例を見つけました:http://www.rkblog.rk.edu.pl/w/p/qtimer-making-timers-pyqt4/

関連する問題