kvlang:Builder.load_string问题

问题描述 投票:0回答:1

我只是试图制作一个如下所示的小型hello world程序。为什么什么都没显示。

# File: main.py
from kivy.app import App
from kivy.lang import Builder
from kivy.base import runTouchApp 

KV = '''
# File: clock.kv
<aClock@BoxLayout>:
  orientation: 'vertical'
  Label:
    color: 1,0,1,1
    text: '00:00:00'

<myClock> :
  aClock:
'''


class myClock(App):
    pass

if __name__ == '__main__':
    Builder.load_string(KV)
    myClock().run()
kivy kivy-language
1个回答
1
投票
from kivy.app import App
from kivy.lang import Builder

KV = '''
<AClock@BoxLayout>:
  orientation: 'vertical'
  Label:
    color: 1,0,1,1
    text: '00:00:00'

AClock:  # This is going to be the return value of Builder.load_string()
'''


class MyClock(App):
    def build(self):
        return Builder.load_string(KV)

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

App不是小部件,所以您不能这样做:

<myClock> :
  aClock:

并且在Kivy中,PEP8是约束而不是样式。所有Widgtes的类名必须以大写字母开头。因此aClock必须为AClock

并且您应该实现build()并使其返回小部件。 (不过,在某些情况下build()不必返回小部件。)

分成两个文件

# myclock.kv

<AClock@BoxLayout>:
  orientation: 'vertical'
  Label:
    color: 1,0,1,1
    text: '00:00:00'

AClock:
# main.py

from kivy.app import App

class MyClock(App):
    pass

if __name__ == '__main__':
    MyClock().run()
© www.soinside.com 2019 - 2024. All rights reserved.