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
答案 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,并且运行良好。