Проблема заключается в том, что в методе LittleButtons
__init__()
его позиция по-прежнему является значением по умолчанию (0,0), поэтому позиция Rectangle
установлена в (0,0).Когда вы используете KV
, он умно связывает позицию Rectangle
с позицией LittleButtons
, когда вы ссылаетесь на self.pos
.К сожалению, в файле .py
вы должны предоставить эту привязку самостоятельно.Итак, вот модификация вашего LittleButtons
, которая должна обрабатывать изменения позиции:
class LittleButtons(Button):
dur = 2
def reup(self, *args):
Animation.cancel_all(self)
Animation(pos_hint = {'center_x': random(), 'center_y': random()}, duration = self.dur).start(self)
def __init__(self, **kwargs):
self.rect = None
super(LittleButtons, self).__init__(**kwargs)
self.pos_hint = {'center_x': random(), 'center_y': random()}
self.size_hint = None, None
self.width = random() * (Window.width / 20)
self.height = self.width
self.background_color = [0,0,0,.05]
with self.canvas:
Color(rgba = [1,1,1,.2])
self.rect = Rectangle(pos = self.pos, size = self.size)
Animation(pos_hint = {'center_x': random(), 'center_y': random()}, duration = self.dur).start(self)
Clock.schedule_interval(self.reup, self.dur)
def on_pos(self, instance, pos):
if self.rect is not None:
self.rect.pos = pos
Изменения - это добавление атрибута self.rect
и метода on_pos
.
Вы можете добавить что-то подобное, если вам нужно справиться со сменой size
.