Как разграничить два виджета в Python Kivy?

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

import kivy
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.anchorlayout import AnchorLayout
from kivy.uix.label import Label
from datetime import date
from datetime import time
from datetime import datetime
from kivy.uix.widget import Widget
from kivy.graphics import Color, Line
from kivy.uix.floatlayout import FloatLayout
from math import cos, sin, pi
from kivy.clock import Clock
from kivy.lang import Builder
from kivy.properties import NumericProperty
import time
import datetime

kv = '''
#:import math math

[ClockNumber@Label]:
    text: str(ctx.i)
    pos_hint: {"center_x": 0.5+0.42*math.sin(math.pi/6*(ctx.i-12)), "center_y": 0.5+0.42*math.cos(math.pi/6*(ctx.i-12))}
    font_size: self.height/16

<MyClockWidget>:
    face: face
    ticks: ticks
    FloatLayout:
        id: face
        size_hint: None, None
        pos_hint: {"center_x":0.5, "center_y":0.5}
        size: 0.9*min(root.size), 0.9*min(root.size)
        canvas:
            Color:
                rgb: 0.1, 0.1, 0.1
            Ellipse:
                size: self.size     
                pos: self.pos
        ClockNumber:
            i: 1
        ClockNumber:
            i: 2
        ClockNumber:
            i: 3
        ClockNumber:
            i: 4
        ClockNumber:
            i: 5
        ClockNumber:
            i: 6
        ClockNumber:
            i: 7
        ClockNumber:
            i: 8
        ClockNumber:
            i: 9
        ClockNumber:
            i: 10
        ClockNumber:
            i: 11
        ClockNumber:
            i: 12
    Ticks:
        id: ticks
        r: min(root.size)*0.9/2
'''
Builder.load_string(kv)

class MyClockWidget(FloatLayout):
    pass

class IncrediblyCrudeClock(Label):
    def update(self, *args):
        self.text = time.asctime()

class Ticks(Widget):
    def __init__(self, **kwargs):
        super(Ticks, self).__init__(**kwargs)
        self.bind(pos=self.update_clock)
        self.bind(size=self.update_clock)

    def update_clock(self, *args):
        self.canvas.clear()
        with self.canvas:
            time = datetime.datetime.now()
            Color(0.2, 0.5, 0.2)
            Line(points=[self.center_x, self.center_y, self.center_x+0.8*self.r*sin(pi/30*time.second), self.center_y+0.8*self.r*cos(pi/30*time.second)], width=1, cap="round")
            Color(0.3, 0.6, 0.3)
            Line(points=[self.center_x, self.center_y, self.center_x+0.7*self.r*sin(pi/30*time.minute), self.center_y+0.7*self.r*cos(pi/30*time.minute)], width=2, cap="round")
            Color(0.4, 0.7, 0.4)
            th = time.hour*60 + time.minute
            Line(points=[self.center_x, self.center_y, self.center_x+0.5*self.r*sin(pi/360*th), self.center_y+0.5*self.r*cos(pi/360*th)], width=3, cap="round")




class TestApp(App):
    def build(self):
        
        Full_BL=BoxLayout(orientation='vertical')
        clock = MyClockWidget()
        Clock.schedule_interval(clock.ticks.update_clock, 1)
        Clock_FloatLayOut=FloatLayout()
        Clock_BoxLayOut=BoxLayout()
        crudeclock = IncrediblyCrudeClock()
        crudeclock_LayOut=BoxLayout()
        Clock.schedule_interval(crudeclock.update, 1)
        
        Clock_FloatLayOut.add_widget(clock)
        Clock_BoxLayOut.add_widget(Clock_FloatLayOut)
        crudeclock_LayOut.add_widget(crudeclock)
        Full_BL.add_widget(Clock_BoxLayOut)
        Full_BL.add_widget(crudeclock_LayOut)

        return  Full_BL

if __name__ == '__main__':
    TestApp().run()

введите сюда описание изображения


Ответы (1 шт):

Автор решения: xXZyzzXx
'''<MyClockWidget>:
    Ticks:
        pos_hint: {"center_x":0.5, "center_y":0.5}
        id: ticks
        r: min(root.size)*0.9/2
'''
Builder.load_string(kv)



class TestApp(App):
    def build(self):
        Full_BL = BoxLayout(orientation='vertical', size_hint=(.5, .5), pos_hint=({'center_x': .5, 'center_y': .5}))
        clock = MyClockWidget(size_hint_y=.9)
        Clock.schedule_interval(clock.ticks.update_clock, 1)
        crudeclock = IncrediblyCrudeClock(size_hint_y=.1)
        Clock.schedule_interval(crudeclock.update, 1)
        Full_BL.add_widget(crudeclock)
        Full_BL.add_widget(clock)

        return Full_BL


if __name__ == '__main__':
    TestApp().run()
→ Ссылка