Kivy:Wie ändere ich die Widget-Größe mithilfe von NumericProperty?
Frage
Ich versuche, die Größe eines Ziegel-Widgets jedes Mal zu ändern, wenn es neu erscheint.
Die py-Datei hat
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)
und die kv-Datei hat
<BrickGreen>:
size_hint: None, None
size: self.brickwidth, 25
canvas:
Color:
rgba: 0, 1, 0, 1
Rectangle:
pos: self.pos
size: self.size
Im Wesentlichen sollte Level 0 Steine mit einer Länge von 100 haben. Sobald es kaputt geht, geht es auf Level 1 über und sollte Steine mit einer Länge von 75 hervorbringen, aber es bleibt bei 100
Lösung
BrickGreen.brickwidth = 100
Dadurch wird die NumericProperty auf Klassenebene durch die Zahl 100 ersetzt.Sie müssen den Wert für die Ziegelbreite festlegen Instanzen Ihrer Objekte, nicht der Klassen selbst.In diesem Fall könnten Sie (zum Beispiel) die gewünschte Breite an Ihr übergeben spawn_brick
Methode und verwenden Sie sie beim Instanziieren von BrickGreen.
Sie müssen NumericProperty auch auf Klassenebene deklarieren, nicht innerhalb __init__
.
Ich empfehle, die Kivy-Dokumentation zu Eigenschaften zu lesen und die Beispiele durchzugehen, um zu sehen, wie diese verwendet werden sollten.