2017-02-28 103 views
1

我正在製作一個應該每隔一秒更新一次的標籤。我試着用時鐘表製作它,但它似乎沒有工作。奇怪的是,如果我使用一個按鈕來調用相同的功能,它工作正常。kivy問題時鐘更新標籤

from kivy.app import App 
from kivy.uix.boxlayout import BoxLayout 
from kivy.properties import StringProperty 
from kivy.clock import Clock 


class FirstLayout(BoxLayout): 
    r = 0 

    def __init__(self, **kwargs): 
     super(FirstLayout, self).__init__(**kwargs) 
     self.change = self.ids.temp_label 

    def my_callback(self, *args): 
     self.r += 1 
     print self.r 
     t = str(self.r) 
     self.change.text = t 


class TryApp(App): 
    def build(self): 
     Clock.schedule_interval(FirstLayout().my_callback, 1) 
     return FirstLayout() 


app = TryApp() 
app.run() 

的.kv文件:

<FirstLayout>: 
    orientation: 'vertical' 
    Label: 
     id: temp_label 
     text: 'something' 
    Button: 
     on_press: root.my_callback() 

當我運行代碼我得到的印刷品顯示該功能正在運行,但標籤不更新。那裏有我的邏輯有問題嗎?

預先感謝您。

PS:我知道這裏可悲的是那些我發現是回答有關使用,我已經做

回答

0

的問題是,回調是一個例如時鐘答案大概有這幾個問題,你不要「T使用

def build(self): 
    Clock.schedule_interval(FirstLayout().my_callback, 1) #<--- FirstLayout created and never used 
    return FirstLayout() #this one will be used :(

相反,你需要調用FirstLayout的方法,你使用

def build(self): 
    first_layout = FirstLayout() # "There should be one ..." :) 
    Clock.schedule_interval(first_layout.my_callback, 1) 
    return first_layout 
+0

問題解決了!非常感謝你。我想我還有很多東西要學習python。 – Thiago