Python-Kivy:on_touch_down() 定义为特定子项影响所有子项

Python-Kivy: on_touch_down() defined to specific children affects on all childrens

我想制作一个 android-lock 之类的东西,所以我有 2 个按钮图像(按钮正常,按钮按下)。

我在每个图像上定义了一个函数 on_touch_down,所以当我按下它时,它会将源更改为按下的按钮,而 on_touch_up 会将其恢复正常。但是每次我按下屏幕的任何部分时,它都会立即更改所有按钮。

如何让它在我按下时只改变每个按钮,而不是在我按下任何地方时改变一切?

这是我的 kv 文件:

Manager:
    Principal:

<Principal>:
    GridLayout:
        cols: 3
        Image:
            id: '1'
            size: 30,30
            source: 'button.png'
            on_touch_down: self.source = 'button_press.png'
            on_touch_up: self.source = 'button.png'
            allow_strech: True
        Image:
            id: '2'
            size: 30,30
            source: 'button.png'
            on_touch_down: self.source = 'button_press.png'
            on_touch_up: self.source = 'button.png'
            allow_strech: True
        Image:
            id: '3'
            size: 30,30
            source: 'button.png'
            on_touch_down: self.source = 'button_press.png'
            on_touch_up: self.source = 'button.png'
            allow_strech: True
        Image:
            id: '4'
            size: 30,30
            source: 'button.png'
            on_touch_down: self.source = 'button_press.png'
            on_touch_up: self.source = 'button.png'
            allow_strech: True
        Image:
            id: '5'
            size: 30,30
            source: 'button.png'
            on_touch_down: self.source = 'button_press.png'
            on_touch_up: self.source = 'button.png'
            allow_strech: True
        Image:
            id: '6'
            size: 30,30
            source: 'button.png'
            on_touch_down: self.source = 'button_press.png'
            on_touch_up: self.source = 'button.png'
            allow_strech: True
        Image:
            id: '7'
            size: 30,30
            source: 'button.png'
            on_touch_down: self.source = 'button_press.png'
            on_touch_up: self.source = 'button.png'
            allow_strech: True
        Image:
            id: '8'
            size: 30,30
            source: 'button.png'
            on_touch_down: self.source = 'button_press.png'
            on_touch_up: self.source = 'button.png'
            allow_strech: True
        Image:
            id: '9'
            size: 30,30
            source: 'button.png'
            on_touch_down: self.source = 'button_press.png'
            on_touch_up: self.source = 'button.png'
            allow_strech: True

不要定义 on_touch_* 事件处理程序,而是在 ButtonBehavior:

的帮助下定义可点击的图像 class
from kivy.uix.behaviors.button import ButtonBehavior

class ClickableImage(ButtonBehavior, Image):

    def on_press(self):
        pass

    def on_release(self):
        pass

现在,您可以在您的 kv 文件中使用它了。还有其他的行为,你可以去查看here.