Kivy:cómo cambiar el tamaño de widget usando numericproperty?
Pregunta
Tratando de hacer un ladrillo widget de cambio de tamaño cada vez que se reapariciones.
El archivo py
class Game(FloatLayout):
player = ObjectProperty(None)
playbutton = ObjectProperty(None)
ratebutton = ObjectProperty(None)
brickg = ObjectProperty(None)
ballsin = NumericProperty(0)
bricklist = ListProperty([])
score = NumericProperty(0)
switch = NumericProperty(0)
level = NumericProperty(0)
def __init__(self, *args, **kwargs):
super(Game, self).__init__(*args, **kwargs)
Clock.schedule_interval(self.update, 1./60)
def spawn_brick(self, *args):
b2 = BrickGreen(x=randint(50, self.width - 50), \
y=randint(self.height - self.height / 4, self.height - (self.height/13)))
self.bricklist.append(b2)
self.add_widget(b2)
def check_brick_spawn(self, *args):
if len(self.bricklist) == 0:
if self.level == 0:
BrickGreen.brickwidth = 100
self.spawn_brick()
elif self.level == 1:
BrickGreen.brickwidth = 75
self.spawn_brick()
else:
BrickGreen.brickwidth = 50
self.spawn_brick()
class BrickGreen(Widget):
def __init__(self, **kwargs):
super(BrickGreen, self).__init__(**kwargs)
brickwidth = NumericProperty(0)
y el kv archivo
<BrickGreen>:
size_hint: None, None
size: self.brickwidth, 25
canvas:
Color:
rgba: 0, 1, 0, 1
Rectangle:
pos: self.pos
size: self.size
Esencialmente, el nivel 0 deben tener los ladrillos con una longitud de 100, una vez que se rompe es el que va a nivel 1 y debe spawn de ladrillos con una longitud de 75, pero se queda al 100
Solución
BrickGreen.brickwidth = 100
Esto reemplaza el NumericProperty a nivel de clase con el número 100.Usted necesita para establecer el valor de brickwidth para las instancias de los objetos, no de la duración de las clases.En este caso, usted podría, por ejemplo, pasar el ancho que desee para su spawn_brick
método y utilizarlo cuando se ejecuta el BrickGreen.
También deberá declarar la NumericProperty a nivel de clase, no en el interior __init__
.
Sugiero la lectura de la kivy documentación sobre las propiedades y va a través de los ejemplos para ver cómo estos deben ser usados.