Python/Kivy:在构造函数中创建属性
我感到困惑,我想这意味着我即将学习Python的一些新知识。 我希望向对象添加一些属性。稍后,我将检查这些属性是否存在并采取行动。因此,作为.kv文件的一部分,我的对象是一个带有标签的黑盒子,周围有一条白线:Python/Kivy:在构造函数中创建属性,python,kivy,Python,Kivy,我感到困惑,我想这意味着我即将学习Python的一些新知识。 我希望向对象添加一些属性。稍后,我将检查这些属性是否存在并采取行动。因此,作为.kv文件的一部分,我的对象是一个带有标签的黑盒子,周围有一条白线: <Box>: txt: txt id: txt ccolor: 0, 0, 0, 1 on_color: 0, 0, 1, 1 canvas.before: Color: rgba: self.cc
<Box>:
txt: txt
id: txt
ccolor: 0, 0, 0, 1
on_color: 0, 0, 1, 1
canvas.before:
Color:
rgba: self.ccolor
Rectangle:
pos: self.pos
size: self.size
Color:
rgba: 1, 1, 1, 1
Line:
width: 1.
rectangle: (self.x, self.y, self.width, self.height)
halign: 'center'
第一次调用显然按照我的意愿进行,设置ccolor。
第二次调用失败:
[WARNING ] stderr: File "gdisp.py", line 218, in new_data
[WARNING ] stderr: b = Box(on_color = (1, 0, 0, 1))
[WARNING ] stderr: File "C:\Python27\lib\site-packages\kivy\uix\label.py", line 266, in __init__
[WARNING ] stderr: super(Label, self).__init__(**kwargs)
[WARNING ] stderr: File "C:\Python27\lib\site-packages\kivy\uix\widget.py", line 324, in __init__
[WARNING ] stderr: self.bind(**on_args)
[WARNING ] stderr: File "kivy\_event.pyx", line 430, in kivy._event.EventDispatcher.bind (kivy\_event.c:5903)
[WARNING ] stderr: AssertionError: (1, 0, 0, 1) is not callable
我不明白为什么第一个有效,但第二个无效。
我试过玩uuu init_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。我想这就是答案所在
对于额外的学分,我希望以下或类似的工作,如果它更复杂:
s = "on_color = (1, 1, 1, 1), off_color = (0, 0, 0, 1)"
Box(s)
最终的想法是拥有一个带有标签的框,根据条件,标签会更改为两种用户选择的颜色之一。
嗯,那些txt:东西是什么?摆弄碎屑盒是标签的一个子类。标签有一个名为“颜色”的属性,用于控制文本颜色。所有属性都会自动在\u propertyname上(即此处的\u color上)提供一个事件,该事件在属性值更改时触发。这个事件不能仅仅是一个语句,它必须是将被调用的代码。仅仅是一个值是没有意义的
在这里,您显然希望on_color是属性的名称,但这与现有事件冲突。我不确定属性的名称是否可以以on开头,这可能会在更一般的方式与事件系统冲突
解决方案似乎只是使用一个不同的名称,例如active_color。感谢您指出本应显而易见的内容!可能是彩色的:
[WARNING ] stderr: File "gdisp.py", line 218, in new_data
[WARNING ] stderr: b = Box(on_color = (1, 0, 0, 1))
[WARNING ] stderr: File "C:\Python27\lib\site-packages\kivy\uix\label.py", line 266, in __init__
[WARNING ] stderr: super(Label, self).__init__(**kwargs)
[WARNING ] stderr: File "C:\Python27\lib\site-packages\kivy\uix\widget.py", line 324, in __init__
[WARNING ] stderr: self.bind(**on_args)
[WARNING ] stderr: File "kivy\_event.pyx", line 430, in kivy._event.EventDispatcher.bind (kivy\_event.c:5903)
[WARNING ] stderr: AssertionError: (1, 0, 0, 1) is not callable
s = "on_color = (1, 1, 1, 1), off_color = (0, 0, 0, 1)"
Box(s)