Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python/Kivy:在构造函数中创建属性_Python_Kivy - Fatal编程技术网

Python/Kivy:在构造函数中创建属性

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

我感到困惑,我想这意味着我即将学习Python的一些新知识。 我希望向对象添加一些属性。稍后,我将检查这些属性是否存在并采取行动。因此,作为.kv文件的一部分,我的对象是一个带有标签的黑盒子,周围有一条白线:

<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)