Python kv语言id作为ObjectProperty kivy与另一个类对象链接

Python kv语言id作为ObjectProperty kivy与另一个类对象链接,python,kivy,Python,Kivy,我正在尝试使用时钟中的更新方法更新另一个类中的标签文本,但我不理解为什么它不能正确更新标签。我有一个示例代码如下: gui_v9 = ''' #:import Clock kivy.clock.Clock <Level_1>: on_enter: self.EnterLevel_1() <ScoreBar>: time_Label: timelabel GridLayout: rows: 4 cols: 1

我正在尝试使用时钟中的更新方法更新另一个类中的标签文本,但我不理解为什么它不能正确更新标签。我有一个示例代码如下:

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()
gui_v9=''
#:导入Clock kivy.Clock.Clock
:
on_enter:self.EnterLevel_1()
:
时间标签:timelabel
网格布局:
行数:4
科尔斯:1
大小:root.size
#远离边界的空间
填充:2
间距:10
画布:
颜色:
rgba:204/255.0、204/255.0、0/255.0、1
矩形:
#这里的self指的是小部件,即FloatLayout
pos:self.pos
大小:self.size
按钮:
文字:“分数”
大小提示:.5,.5
标签:
案文:“1级”
标签:
正文:“时间:”
id:timelabel
按钮:
文本:“静音”
'''
类记分栏(小部件):
时间标签=对象属性(无)
定义初始化(自):
超级(记分栏,自我)。\uuuu初始化
类级别_1(屏幕、小部件):
定义初始(自我,**kwargs):
超级(级别1,自我)。\uuuuu初始值(**kwargs)
self.layout=GridLayout(cols=2,间距=(10),填充=10)
def入口液位_1(自身):
打印“您好,这里是EnterLevel_1.一级Gui工作区”
记分栏=记分栏()
场=塔马(速度=3)
self.layout.add_小部件(字段)
self.layout.add_小部件(记分栏)
self.add\u小部件(self.layout)
时钟时间间隔(Field.update,10.0/100)
#场
tama类(小部件):
def _初始(自,速度=1):
超级(塔玛,赛尔夫)。\uuuuu init
自身速度=速度
self.id=“字段”
self.size=(800600)
自身额外费用=200
打印记分栏().time\u Label.text
def更新(自我,dt):
打印记分栏().time\u Label.text
记分栏().time_Label.text=“cdfdfd”
#创建屏幕管理器
Builder.load\u字符串(gui\u v9)
sm=屏幕管理器()
sm.add_小部件(Level_1(name='Level_1'))
类别MyJB(应用程序):
def生成(自):
返回sm
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
MyJB().run()

问题是您有这样的行

print ScoreBar().time_Label.text
这不会告诉您任何关于现有记分栏的信息,它会生成一个新的记分栏并返回有关该记分栏的信息


tama
,您可以参考
self.parent.children[1]
来访问您最初添加的引用,或者设计另一种方法来访问引用。

如果“没有正确更新”,则表示它“不知何故”在更新,但错误?怎么做?这真的很有帮助,干杯:)当我指定self.parent.children[1]或self.parent.children[0]时,它就起作用了。但是有什么方法可以让我做一些类似于如果self.parent.children[1]=的事情吗。。我的意思是,有没有办法通过ID获得孩子,例如,在self.parent.children。。。那你能找到一个特殊的孩子吗?