如何在 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)
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)