Kivy CheckBox 在指定区域外激活

Kivy CheckBox Activate Outside Designated Area

我一直在玩这个 in changing the background image of the CheckBox inorder to ultimately change the boarder/padding - 找到另一个 post,但似乎没有更新(?)。除此之外,我注意到当我创建一个 CheckBox 时,指定用于容纳 CheckBox 的“区域”可用于 activate/deactive CheckBox(见下图)。

from kivy.config import Config
Config.set('graphics', 'multisamples', '0')
from kivy.app import App
from kivy.lang import Builder

sm = Builder.load_file('main.kv')


class TestApp(App):
    def build(self):
        return sm
        

if __name__ == '__main__':
    
    TestApp().run()
Screen:  

    BoxLayout:
        size_hint_y: None
        orientation: 'horizontal'       
        Button:
            text: 'Go back'

        CheckBox:
            size_hint_x: None
            width: 60           
            canvas.before:
                Rectangle:
                    source: 'white.png'
                    size: sp(22), sp(22)
                    pos: int(self.center_x - sp(11)), int(self.center_y - sp(11))

所有红色区域都可以点击激活按钮。这是为什么?而且,我如何将 activation/deactivation 专门限制为实际的 CheckBox?

由于 CheckBox 在布局 class 中,它将占用所有可用的 space(对它自己)。因此,如果您希望将其限制为一个大小,只需明确设置即可。另外,要将它放在 BoxLayout in orientation: 'horizontal' 的中间,您可以使用 pos_hint。因此,您修改后的 kv 规则如下所示:

        ...
        CheckBox:
            size_hint: None, None
            size: 60, 60
            pos_hint: {"center_y" : 0.5}
            canvas.before:
            ...

要设置自定义背景,您可以查看其 API Reference