2014-12-12 2 views
0

Я могу добавить новый виджет, но он что-то неправильно подключается. Холст кажется его неправильной системой координат.динамически добавляет виджеты kivy

Мой .py

class Ship(Widget): 
    def __init__(self, **kwargs): 
     super(Ship, self).__init__(**kwargs) 
     self.vel = 10 

class Game(Widget): 

    def __init__(self, **kwargs): 
     super(Game, self).__init__(**kwargs) 
     self.ship = Ship() 
     self.add_widget(self.ship) 
     self.ship.center = self.center 

Мой .kv

<Ship> 
    size: 50, 50 
    canvas: 
     Color: 
      rgb: 0, 0, 1 
     Rectangle: 
      size: self.size 
      pos: self.pos 
<Game> 
    canvas.before: 
     Color: 
      rgb: 0, 0, 0 
     Rectangle: 
      size: self.size 
      pos: self.pos 

Это создает изображение: enter image description here

Я бы ожидать, что синяя коробка, чтобы быть мертвой.

ответ

1

В то время, когда вы назначаете центральное положение, макет еще не рассчитан. Каждый виджет начинается с размера 100, 100 по умолчанию, а ваш Ship позиционируется правильно в центре этой области 100, 100. Если вы хотите, чтобы Ship оставался центрированным, вам необходимо связать свойства:

class Game(Widget): 
    def __init__(self, **kwargs): 
     super(Game, self).__init__(**kwargs) 
     self.ship = Ship() 
     self.add_widget(self.ship) 
     self.bind(center=self.ship.setter('center')) 
Смежные вопросы