Kivy:分散内部分散

时间:2018-05-18 16:02:54

标签: python kivy

问题:如何将一个Scatter放入另一个Scatter

我对kivy的坐标有些麻烦。我原则上希望在Scatter中有一个Scatter。它们应该是可移动的(移动第一个散射会移动所有东西,移动第二个散射会移动第一个散射内的第二个散射)。

具体设置

  1. 我想要一个可扩展且可移动的基本地图(散点图1)。当我们变换这个地图时,所有绘制在这个地图“顶部”的东西也应该被转换(例如它保持在地图上的位置)。

  2. 然后我想在地图上绘制一个可以自己移动的网格(散点图2)。

  3. 然后我在分散2上添加一些观点。

  4. 重新调整窗口时必须保留相对位置。

  5. 预期行为

    当我抓住散射2时,它可以移动并且点(3.)保持相对于散射2.当我抓住散射1时,它应该移动所有东西。散射2并且这些点保持在地图上的位置(散射1)。

    基本示例代码

    from kivy.app import App
    from kivy.uix.boxlayout import BoxLayout
    from kivy.lang import Builder
    
    kv = """
    <MyRoot>:
        orientation: 'vertical'
        ActionBar:
            ActionView:
                ActionPrevious:
                    title: ''
                    with_previous: True
                ActionOverflow:
                    ActionButton:
                        text: 'Preferences'
                        on_press: app.open_settings()
        Scatter:
            canvas:
                Color:
                    rgb: .2, .2, .3
                Rectangle:
                    pos: self.pos
                    size: self.size
            Scatter:
    
                canvas:
                    Color:
                        rgb: .8, .2, .3
                    Rectangle:
                        pos: self.pos
                        size: self.size
                Widget:
                    pos: 200, 200
                    canvas:
                        Color:
                            rgb: .1, .7, .3
                        Ellipse:
                            pos: 30,50
                            size: 10, 10
    """
    Builder.load_string(kv)
    
    
    class MyApp(App):
        def build(self):
            return MyRoot()
    
    
    class MyRoot(BoxLayout):
        pass
    
    
    if __name__ == '__main__':
        MyApp().run()
    

    此处还有一张正在发生的事情的图片。我想在红色散射上固定绿点,在紫色散射体内放置红色散射: enter image description here

    方法

    我想我必须在每一步中转换坐标并覆盖函数on_touch_...,可能使用self.parent.to_parent(*touch.pos)但不幸的是我无法将所有内容修补在一起。

    感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

Rectangle:
    size: self.size

这是相对布局,因此我们需要:pos: 0,0而不是pos: self.pos