2017-03-08 15 views
0

ラベルのテキストを更新するにはどうすればよいですか?kivyのラベルのテキストを変更するにはどうすればいいですか?

a=Label(text='60') 
self.add_widget(a) 

コードは例50

のために、私は別の番号に60を変更する方法を実行している間、私はこのようなテキストに変更しようとしています:

a=Label(text='60') 
self.add_widget(a) 
time.sleep(5) 
a=Label(text='50') 
self.add_widget(a) 

をしかし、これはいないようです働く

答えて

0

あなたのコードは、2つの異なるラベルウィジェットを作成し、それらをウィジェットツリーに追加します。以前に作成したウィジェットの特定のプロパティを変更する場合:

# Create Label and reference it to var 'a' 
a = Label(text='60') 
self.add_widget(a) 
time.sleep(5) 
# You can use the 'a' var to access the previously created Label 
# and modify the text attribute 
a.text = '50' 

はEDIT:ラベルのテキストプロパティの変更を遅延させるためには、この最後の1はしばらくあなたのアプリを凍結する(代わりにtimeClock使用しますタイマーは)

from kivy.clock import Clock 

def update_label(label_widget, txt): 
    label_widget.text = txt 

# Create Label and reference it to var 'a' 
a = Label(text='60') 
self.add_widget(a) 

# In five seconds, the update_label function will be called 
# changing the text property of the 'a' Label to "50" 
Clock.schedule_once(lambda x: update_label(a, "50"), 5) 

EDIT2終了:

は、あなたが定期的にラベル変更するには、使用することができますカウントダウンとラベルをClock.schedule_interval

from kivy.clock import Clock 

def countdown(label_widget): 
    # Convert label text to int. Make sure the first value 
    # is always compliant 
    num = int(label_widget.text) 

    # If the counter has not reach 0, continue the countdown 
    if num >= 0: 
     label_widget.text = str(num - 1) 
    # Countdown reached 0, unschedulle this function using the 
    # 'c' variable as a reference 
    else: 
     Clock.unschedule(c) 

# Create Label and reference it to var 'a' 
a = Label(text='60') 
self.add_widget(a) 

# Every 1 second, call countdown with the Label instance 
# provided as an argument 
c = Clock.schedule_interval(lambda x: countdown(a), 1) 
+0

これは本当に役に立ちました。ただし、グラフィカルユーザーの顔が読み込まれる前にラベルのテキストが変更され、画面に到達するまでに既にテキストが変更されています。実際の画面でいったん変更したら、どのようにテキストを変更するのですか? –

+0

ああ、そうです。これは 'time.sleep(5)'のためです。 Kivyでは、これによりアプリケーションがフリーズされます。特定のイベントをスケジュールできる場合は、代わりに「時計」を使用する必要があります。私はこれを行う可能な方法で編集します – ODiogoSilva

+0

私はこの解決策を試して、 'Clock.schedule_once(lambda x:update_label(a、" 50 ")、5)'と次に 'Clock.schedule_once(lambda x:update_label (a、 "40")、5)。しかし、これはちょうど最初の行をスキップし、40を表示するようにまっすぐに行った。どのように私はこれを解決するだろう。これはとても便利です。 –

関連する問題