如何在 Kivy 的 ScatterLayout 中添加一个小按钮?标签自动工作,按钮不

How do I add a small button to a ScatterLayout in Kivy? Label works auto, Button does not

from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.scatterlayout import ScatterLayout

class ZoomWidget(ScatterLayout):
    def __init__(self, **kwargs):
        super(ZoomWidget, self).__init__(**kwargs)
        self.add_widget(Label(text='Label'))

    def on_touch_down(self, touch):
        if touch.is_double_tap:
            button = Button(text='Button')
            self.add_widget(button) 
            return True
        else:
            return super().on_touch_down(touch)


class ZoomSpaceApp(App):
    def build(self):
        return ZoomWidget()


if __name__ == '__main__':
    ZoomSpaceApp().run()

所以,标签似乎可以工作,我可以右键单击(在桌面上 OS)创建第二个触摸位置,然后左键拖动缩放和旋转标签。但是,按钮似乎只是填满了整个布局,我无法缩放或旋转它。那么在 ScatterLayout 中,如何让 Button 像 Label 默认情况下那样工作?

此外,我想使用其他小部件做类似的事情,所以最一般的答案就可以了。例如,我是否将 Button 封装在某种类型的小部件(如布局)中? ZoomWidget 中显示的将是其他小部件。我的应用程序的重点是让用户通过触摸创建自己的应用程序并决定将什么放在那里(首先使用上下文菜单)。知道这一点,有没有更好的方法来解决这个问题?

它不起作用,因为 Button 也适用于触摸,因此它很可能会吃掉你所有的触摸并且不会让 ScatterLayout 可以使用任何东西。要让它工作,你需要有一个属于 ScatterLayout 的区域,用户可以单独使用。

由于 Label 不像 Button 那样处理触摸,它将触摸传递给它可以使用它的第一个小部件,即在这种情况下 ScatterLayout.

def on_touch_down(self, touch):
    if touch.is_double_tap:
        button = Button(text='Button', size_hint=(0.9, 0.9))
        self.add_widget(button)
        return True
    else:
        return super(ZoomWidget, self).on_touch_down(touch)