簡體   English   中英

kv與另一個類Object鏈接的語言id作為ObjectProperty kivy

[英]kv Language id linked with another class Object as ObjectProperty kivy

我正在嘗試使用其在Clock中的更新方法從另一個類更新標簽文本,但我無法理解為什么它沒有正確更新標簽。我有一個示例代碼如下:

gui_v9 = '''
#:import Clock kivy.clock.Clock


<Level_1>:
    on_enter: self.EnterLevel_1()

<ScoreBar>:
    time_Label: timelabel
    GridLayout:
        rows: 4
        cols: 1
        size: root.size
        #Space away from border
        padding: 2
        spacing: 10
        canvas:
            Color:
                rgba: 204/255.0, 204/255.0, 0/255.0, 1
            Rectangle:
                # self here refers to the widget i.e FloatLayout
                pos: self.pos
                size: self.size
        Button:
            text: 'Score'
            size_hint: .5, .5
        Label:
            text: "Level 1"
        Label:
            text: "Time :"
            id: timelabel
        Button:
            text: 'Mute'
'''

class ScoreBar(Widget):
    time_Label = ObjectProperty(None)
    def __init__(self):
        super(ScoreBar, self).__init__()


class Level_1(Screen,Widget):
    def __init__(self, **kwargs):
        super(Level_1, self).__init__(**kwargs)
        self.layout = GridLayout(cols=2,spacing=(10),padding=10)

    def EnterLevel_1(self):
        print "Hi This is EnterLevel_1 . Level One Gui work area  "
        scoreBar = ScoreBar()
        Field = tama(speed=3)
        self.layout.add_widget(Field)
        self.layout.add_widget(scoreBar)
        self.add_widget(self.layout)
        Clock.schedule_interval(Field.update, 10.0/100)
#Field
class tama(Widget):
    def __init__(self, speed=1 ):
        super(tama, self).__init__()
        self.speed = speed
        self.id = "Field"
        self.size = (800,600)
        self.Extra = 200
        print ScoreBar().time_Label.text

    def update(self,dt):
        print ScoreBar().time_Label.text
        ScoreBar().time_Label.text ="cdfdfd"

# Create the screen manager
Builder.load_string(gui_v9)
sm = ScreenManager()
sm.add_widget(Level_1(name='level_1'))

class MyJB(App):
    def build(self):
        return sm

if __name__ == '__main__':
    MyJB().run()

問題是你有像這樣的行

print ScoreBar().time_Label.text

這並沒有告訴你有關現有ScoreBar的任何信息,它會創建一個新的ScoreBar並返回有關它的信息。

tama ,你可以引用self.parent.children[1]來訪問你最初添加的那個,或設計另一種方式來訪問引用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM