tuto.py :
import kivy
kivy.require('1.9.0')
from kivy.app import App
from kivy.uix.widget import Widget
class CustomWidget(Widget):
pass
class CustomWidgetApp(App):
def build(self):
return CustomWidget()
customwidget = CustomWidgetApp()
customwidget.run()
customwidget.kv :
<CustButton@Button>:
font_size: 32
color: 0, 0, 0, 1
size: 150, 50
background_normal: ''
background_down: 'bt-down.png'
background_color: .88, .88, .88, 1
<CustomWidget>:
CustButton:
text: "Random"
pos: root.x, 200
CustButton:
text: "Buttom"
pos: 200, root.y
CustButton:
text: "Buttom"
pos: 200, 400
我运行此代码后立即收到此错误:
...
7: background_color: .88, .88, .88, 1
8:
>> 9: <CustomWidget>:
10: CustButton:
11: text: "Random"
...
Invalid property name
答案 0 :(得分:3)
问题是由于kv文件中的缩进造成的。
sess.run
from kivy.app import App
from kivy.uix.widget import Widget
class CustomWidget(Widget):
pass
class CustomWidgetApp(App):
def build(self):
return CustomWidget()
if __name__ == '__main__':
CustomWidgetApp().run()
答案 1 :(得分:0)
这种压抑是错误的。这就是它应该是这样的:
<强> customwidget.kv 强>
<CustButton@Button>:
font_size: 32
color: 0, 0, 0, 1
size: 150, 50
background_normal: ''
background_down: 'bt-down.png'
background_color: .88, .88, .88, 1
<CustomWidget>:
CustButton:
text: "Random"
pos: root.x, 200
CustButton:
text: "Buttom"
pos: 200, root.y
CustButton:
text: "Buttom"
pos: 200, 400
答案 2 :(得分:0)
让我们看一下KV文件的开头。你有一个规则<CustButton@Button>:
,里面有一些属性。然后是<CustomWidget>:
的事情。从第一眼看来,我觉得它只是一个错误的缩进,如上所述,但让我们看看为什么错误是property
。
KV语言解析器检查on_
语法。如果不存在,则缩进项可以是属性或Widget
(或从其继承的类)。解析器检查<CustomWidget>:
是否是可以添加为子节点的实例。
它检查它是否属于某个属性,或者更好地说是否<CustomWidget>:
类中有一些名为CustButton
的属性。
所以,它不是一个事件,Widget
实例甚至是Kivy属性。那么,让我们抛出一个关于未知项目的错误然后:)
<CustButton@Button>:
font_size: 32
color: 0, 0, 0, 1
size: 150, 50
background_normal: ''
background_down: 'bt-down.png'
background_color: .88, .88, .88, 1
<CustomWidget>: # boom
CustButton:
text: "Random"
pos: root.x, 200
CustButton:
text: "Buttom"
pos: 200, root.y
CustButton:
text: "Buttom"
pos: 200, 400
您可以检查缩进是否良好(即,您是否要声明CustomWidget
规则而不是将其添加为子项)。如果是这种情况,您只能在第一级定义规则,因此<Rule>:
之前不得有任何空格或制表符。
如果您想将其添加为孩子,那么您首先会错过窗口小部件的声明。您应该从<>
中删除括号(<CustomWidget>
),然后在<CustButton@Button>:
<CustomWidget>:
# empty
<CustButton@Button>:
font_size: 32
color: 0, 0, 0, 1
size: 150, 50
background_normal: ''
background_down: 'bt-down.png'
background_color: .88, .88, .88, 1
CustomWidget:
CustButton: # boom with AssertionError
text: "Random"
pos: root.x, 200
CustButton:
text: "Buttom"
pos: 200, root.y
CustButton:
text: "Buttom"
pos: 200, 400
Parser也不喜欢它,因为你使用了你自己内部声明的规则。因此,您应该将此示例中的CustButton
切换为您已经可以使用的内容。例如。 Button
。