2017-12-14 11 views
0

私はappJarでカウントダウンタイマーを作成しようとしており、割り当てられた時間が終了するまでの残り時間を示すラベルを付けています。 appJarのウェブサイトのガイドをかなり見て、ライブラリでループを作成できると言う2つの方法について知っています。 .registerevent(function)または.after(delay_ms, function, *args)を使用できます。私はこれらの方法の両方を試していますし、どちらかを動かすことができません。私は.after関数を動作させる方法を理解することができず、.registerevent関数を使用しようとするたびに何かが動作しません。私の現在の問題は、の機能をに実行することができますが、実際にはで動作しています。です。つまり、コードのブロックが実行されていると言い、ですが、GUIはループを作成してアプリケーションjar内のラベルを更新する

def introduction_bill(x): 
    global time_remaining, time_allotted 
    time_remaining = 120 
    time_allotted = 120 
    app.removeAllWidgets() 
    print("ran 'introduction_bill'") 
    app.addLabel('timer', 'Time remaining: 2:00') 
    app.addButtons(['start timer','update'], [start_timer, update_timer]) 
    app.addButton('next introduction', next_introduction) 

.... 

def update_timer(): 
    global time_remaining, current_function 
    current_function = 'update timer' 
    time_remaining = end_time - t.time() 
    minutes = int(time_remaining // 60) 
    seconds = round(time_remaining % 60, 2) 
    app.setLabel('timer', 'Timer remaining: ' + str(minutes) + ':' + str(seconds)) 
    print("ran 'update_timer'") 
    if time_remaining > -10: 
     app.registerEvent(update_timer) 


def start_timer(x): 
    print("ran 'start_timer'") 
    global start_time, end_time 
    start_time = t.time() 
    end_time = start_time + time_allotted 
    update_timer() 

そしてhereは、その全体がコードで、問題のコードの特定の行をここで

を更新しているins't

私はまだコードの初心者ですので、このコードは不完全で非常に荒いです。

答えて

0

あなたはあなたが言及した両方の方法であなたが望むものを達成することができます。

registerEvent()とすると、一度だけ呼び出す必要があります。次に、機能のスケジューリングが行われます。あなたのコードでは、あなたはそれを繰り返し呼び出すことができません。

after()とすると、何度も繰り返し呼び出す必要があります。だから、

、あなたの現在のコードで、あなたがafter()を使用して方がいいでしょう:

update_timer()ではapp.after(100, update_timer)

タイマーであることをapp.registerEvent(update_timer)への呼び出しを変更してみてください、その後0.1秒ごとに更新する必要があります。

ただし、Start Timerボタンを再度クリックすると問題が発生するため、タイマーが終了するまでボタンを無効にすることをお勧めします。

+0

私はそれを試したことを誓ったが、私は間違って何かを入れていると思う。それは今でも働く!ありがとう! –

+0

それを聞いてうれしいです - あなたが幸せなら私の答えを受け入れてください。 –

関連する問題