为什么 kivy 一次更改所有小部件

Why kivy changes all widgets at once

我创建了 Button 小部件的子class。在处理 on_touch_down 事件时,我想更改按钮文本以进行调试。当我单击一个按钮时,所有此类按钮的文本都会更改。为什么?如何仅更改单击按钮上的文本?

按钮class:

class FigureButton(Button):
    def on_touch_down(self, touch):
        super(FigureButton, self).on_touch_down(touch)
        self.text = 'Clicked'

.kv 文件部分:

FigureButton:
    text: '1'
FigureButton:
    text: '2'

谢谢!

on_touch_down 不进行碰撞检查,因此小部件可以与区域外的触摸进行交互。您可以在代码前添加 'if self.collide_point(*touch.pos): ...(并将您添加的内容缩进到 if 语句中)以使此工作按预期进行。

如您所见,on_press event/method 确实会进行碰撞检查。无论如何,这通常是与按钮交互的更好方式。