Kivy (Python) Проблемы с форматированием

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

class Target(Label):
    def __init__(self, **kwargs):
        super(Target, self).__init__(**kwargs)
        with self.canvas:
            Color(1,1,1)
            d = 400
            Ellipse(pos=((self.center_x - d / 2), (self.center_y - d / 2)), size=(d,d))

            Color(0,0,0)
            d = 320
            Ellipse(pos=((self.center_x - d / 2), (self.center_y - d / 2)), size=(d,d))

            Color(0,0,1)
            d = 240
            Ellipse(pos=((self.center_x - d / 2), (self.center_y - d / 2)), size=(d,d))

            Color(1,0,0)
            d = 160
            Ellipse(pos=((self.center_x - d / 2), (self.center_y - d / 2)), size=(d,d))

            Color(1,1,0)
            d = 80
            Ellipse(pos=((self.center_x - d / 2), (self.center_y - d / 2)), size=(d,d))

Вот и весь необработанный код Python, относящийся к рисованию кругов на виджете. Вот код Kivy, который имеет дело с экраном.

<ScoringLayout>:
    FloatLayout:
        Target:
            center: self.parent.center
            size_hint: 0.2, 0.3

        Button:
            text: "Return"
            on_release: app.root.current = "main"
            font_size: 15
            size_hint: 0.3 ,0.2
            pos_hint: {"right": 1, "bottom": 1}

Scoring Layout - это макет экрана, который переключается на кнопку, расположенную под неработающим кодом, которая ссылается на главный экран приложения.

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

1 ответ

Эллипсы рисуются согласно self.center_x в тот момент, когда __init__ выполняется, в этот момент он по-прежнему по умолчанию (50, 50).

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

Другие вопросы по тегам