在分配用户定义的Kivy小部件属性时,Python会报告无效语法

时间:2015-07-13 05:59:06

标签: python widget kivy

from kivy.uix.label import Label
from kivy.uix.scrollview import ScrollView
from kivy.uix.boxlayout import BoxLayout
from kivy.lang import Builder
from kivy.base import runTouchApp 
from kivy.properties import StringProperty
from kivy.properties import ListProperty
from kivy.graphics.vertex_instructions import Rectangle
from kivy.graphics.context_instructions import Color

Builder.load_string('''
<bbx>:
    orientation: 'vertical'
    my2App:
        color: 1,0,0,1

<my2App>:
    text: root.text
    Label:
        text: root.text
        font_size: 16
        size_hint_y: None
        text_size: self.width, None
        height: self.texture_size[1]
        canvas:
            Color:
                rgba: root.color
            Rectangle:
                pos: self.pos
                size: self.size
''')

class my2App(ScrollView):
    text = StringProperty('default string'*200)
    color = ListProperty([1,0,0,0.25])

class bbx(BoxLayout):
    pass

runTouchApp(bbx())

这是我的惯例kivy代码。 my2App是一个用户定义的小部件,主要是从本教程(https://www.youtube.com/watch?v=WdcUg_rX2fM)复制而来的。唯一的补充是ListProperty定义的颜色属性。不知何故,这个用户定义的颜色属性没有成功。我试图运行my2App,它也没有工作。

> Traceback (most recent call last):    File "test_anotherviky.py", line
> 38, in <module>
>      ''')    File "/usr/lib/python2.7/dist-packages/kivy/lang.py", line 1796, in load_string
>      parser = Parser(content=string, filename=fn)    File "/usr/lib/python2.7/dist-packages/kivy/lang.py", line 1185, in
> __init__
>      self.parse(content)    File "/usr/lib/python2.7/dist-packages/kivy/lang.py", line 1291, in parse
>      rule.precompile()    File "/usr/lib/python2.7/dist-packages/kivy/lang.py", line 1049, in
> precompile
>      x.precompile()    File "/usr/lib/python2.7/dist-packages/kivy/lang.py", line 976, in
> precompile
>      self.co_value = compile(value, self.ctx.filename or '<string>', mode)    File "<string>", line 5
>      color: 1,0,0,1
>           ^  SyntaxError: invalid syntax

2 个答案:

答案 0 :(得分:1)

小部件名称必须以大写字母开头才能在kv中工作,因为它使用它来区分它们与属性。在这里,它认为my2app:是属性设置。

答案 1 :(得分:1)

我正在使用PyCharm 2020.1和Kivy 1.10.1,但遇到了相同的问题: 颜色:1,0,0,1

^ SyntaxError:语法无效 但是我的情况是:size_hint:无,1.我使用camelcase修复了它。像这样:

.py文件: BoxBlue(BoxLayout)类: 没有

.kv文件: BoxBlue: size_hint:无,1 宽度:30

我的班级命名为:boxBlue,所以我在py和kv中将其更改为BoxBlue,并且运行良好。