Как мне создать несколько фигур относительно друг друга в kivy? - PullRequest
0 голосов
/ 27 мая 2019

Я хочу иметь возможность создавать несколько фигур на холсте и располагать их равномерно на расстоянии друг от друга. Я также хотел бы, чтобы фигуры начинали новую линию, как только они достигают конца экрана.

Вот код, который у меня сейчас есть:

def draw_streak(self, obj):
        name = obj.text
        can = self.root.get_screen("three")

        with open("streak.json", "r") as file:
            read = json.load(file)

        for key in read.keys():
            if key == name:
                with open("streak.json", "r+") as f:
                    data = json.load(f)

                get_score = data.get(key, {}).get('score')

                for x in range(get_score):
                    with can.ids.my_box.canvas:
                        Color(0, 1, 0, .75, mode='rgba')
                        Rectangle(pos=can.pos, size=(30,30))

если бы get_score было 10, то я бы хотел нарисовать 10 прямоугольников. Прямо сейчас, когда я запускаю программу, рисуется только один прямоугольник. Я полагаю, что множественные тянутся, но они просто перекрывают друг друга.

EDIT

Это код кв:

<ScreenThree>
    id: screen_three
    name: "three"
    on_leave: my_box.canvas.clear()
    on_leave: selected_streak.canvas.clear()
    ...
        BoxLayout:
            id: my_box
            orientation: "vertical"

my_box это просто идентификатор для BoxLayout

1 Ответ

1 голос
/ 28 мая 2019

pos[0], pos[1], size[0], size[1]

что делают 0 и 1 в rect.size и new_pos?

Kivy Widget »pos

pos

Положение виджета.

pos является ReferenceListProperty из ( x , y ) свойства.

pos содержит координаты x и y позиции виджета. pos[0] относится к координате x, а pos[1] относится к координате y.

Kivy Widget »размер

size

Размер виджета.

размер - это ReferenceListProperty из ( ширина , высота ) свойства.

size содержит ширину и высоту виджета. size[0] относится к ширине, а size[1] относится к высоте.

Создание нескольких фигур

Чтобы предотвратить наложение прямоугольников, сохраните начальную позицию и увеличивайте ее после рисования каждого прямоугольника.

Отрывки

Следующие фрагменты добавляют прямоугольники по диагонали.

    new_pos = can.pos
    for x in range(get_score):
        with can.ids.my_box.canvas:
            Color(0, 1, 0, .75, mode='rgba')
            rect = Rectangle(pos=new_pos, size=(30, 30))
        new_pos[0] += rect.size[0]
        new_pos[1] += rect.size[1]

выход

Result

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...