【问题标题】:How do I add a small button to a ScatterLayout in Kivy? Label works auto, Button does not如何在 Kivy 的 ScatterLayout 中添加一个小按钮?标签自动工作,按钮不工作
【发布时间】:2017-03-23 22:26:58
【问题描述】:
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()

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

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

【问题讨论】:

    标签: user-interface button resize kivy default


    【解决方案1】:

    它不起作用,因为 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多