Вопрос: Как поместить один Scatter
в другой Scatter
?
У меня возникли проблемы с координатами Киви.В принципе я хотел бы иметь 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)
, но, к сожалению, мне не удается соединить все вместе.
Спасибо за любую помощь!