问题:如何将一个Scatter
放入另一个Scatter
?
我对kivy的坐标有些麻烦。我原则上希望在Scatter
中有一个Scatter
。它们应该是可移动的(移动第一个散射会移动所有东西,移动第二个散射会移动第一个散射内的第二个散射)。
我想要一个可扩展且可移动的基本地图(散点图1)。当我们变换这个地图时,所有绘制在这个地图“顶部”的东西也应该被转换(例如它保持在地图上的位置)。
然后我想在地图上绘制一个可以自己移动的网格(散点图2)。
然后我在分散2上添加一些观点。
重新调整窗口时必须保留相对位置。
当我抓住散射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()
此处还有一张正在发生的事情的图片。我想在红色散射上固定绿点,在紫色散射体内放置红色散射:
我想我必须在每一步中转换坐标并覆盖函数on_touch_...
,可能使用self.parent.to_parent(*touch.pos)
但不幸的是我无法将所有内容修补在一起。
感谢您的帮助!
答案 0 :(得分:1)
Rectangle:
size: self.size
这是相对布局,因此我们需要:pos: 0,0
而不是pos: self.pos
。