Kivy:如何为python中创建的小部件使用画布

Kivy:如何为python中创建的小部件使用画布,python,canvas,kivy,Python,Canvas,Kivy,我想在复选框中添加画布以更改其颜色。我发现了这一点,但我正在努力实现它。 我的复选框使用以下代码在python中创建: checkb= CheckBox() layout.add_widget(checkb) 尝试1:我尝试了以下解决方案,但未成功: checkb= CheckBox() checkb.canvas.add(Color(1., 1., 0)) checkb.canvas.add(Rectangle(size=(50, 50))) layout.add_widget(checkb

我想在复选框中添加画布以更改其颜色。我发现了这一点,但我正在努力实现它。 我的复选框使用以下代码在python中创建:

checkb= CheckBox()
layout.add_widget(checkb)
尝试1:我尝试了以下解决方案,但未成功:

checkb= CheckBox()
checkb.canvas.add(Color(1., 1., 0))
checkb.canvas.add(Rectangle(size=(50, 50)))
layout.add_widget(checkb)
尝试2:我还尝试在生成器中创建一个自定义复选框,但没有找到使其工作的方法。我找不到有关此类设置的任何信息,因此我不确定是否可以使其工作:

Builder.load_string('''
<CustomCk@CheckBox>:
    canvas.before:
        Color:
            rgb: 1,0,0
        Rectangle:
            pos:self.center_x-8, self.center_y-8
            size:[16,16]
        Color:
            rgb: 0,0,0
        Rectangle:
            pos:self.center_x-7, self.center_y-7
            size:[14,14]                

''')
编辑:我尝试使用with语句:

checkb= CheckBox()  
with checkb.canvas:
    Color(1, 2, 0)
    Rectangle(size=(50, 50))
layout.add_widget(checkb)
您应该使用python代码中的with语句

with checkb.canvas:
    Color(1., 1., 0)
    Rectangle(size=(50, 50))
您的另一种方法似乎更好,只需稍加修改即可:

Builder.load_string('''
<CustomCk>:
    canvas.before:
        Color:
            rgb: 1,0,0
        Rectangle:
            pos:self.center_x-8, self.center_y-8
            size:[16,16]
        Color:
            rgb: 0,0,0
        Rectangle:
            pos:self.center_x-7, self.center_y-7
            size:[14,14]                

    ''')

class CustomCk(CheckBox): #define the class in the python file... 
     pass

checkb= CustomCk()
layout.add_widget(checkb)
我试着用我问题中的编辑语句,但背景保持不变。知道为什么吗?在kv示例中,您还将pos绑定到复选框的中心,尝试在示例中执行相同的操作,您还需要绑定CheckBox.center
Builder.load_string('''
<CustomCk>:
    canvas.before:
        Color:
            rgb: 1,0,0
        Rectangle:
            pos:self.center_x-8, self.center_y-8
            size:[16,16]
        Color:
            rgb: 0,0,0
        Rectangle:
            pos:self.center_x-7, self.center_y-7
            size:[14,14]                

    ''')

class CustomCk(CheckBox): #define the class in the python file... 
     pass

checkb= CustomCk()
layout.add_widget(checkb)