Ich habe den folgenden Code:Kivy GridLayout Zugriff auf Zeilen und Spalten gibt keine zurück.
class MyGridLayout(GridLayout):
def __init__(self, **kwargs):
super(MyGridLayout, self).__init__(**kwargs)
class Board(Widget):
my_layout = ObjectProperty(None)
def __init__(self, **kwargs):
super(Board, self).__init__(**kwargs)
def on_my_layout(self, instance, value):
print self.my_layout.cols
class MyApp(App):
def build(self):
return Board()
if __name__ == '__main__':
MyApp().run()
Und das ist meine kv-Datei:
<Board>:
my_layout: my_layout
MyGridLayout:
id: my_layout
cols: 10
rows: 10
Auf Methode on_my_layout
ich drucken möchten, wie viele cols meine Instanz MyGridLayout hat. Aber, es kommt mir immer keiner zurück. Wenn ich auf Zeilen zugreifen möchte, gibt es auch None zurück. Was muss ich in meinem Python-Code oder in meiner kivy-Sprache ändern, um auf die richtigen Werte der Zeilen und Spalten von MyGridLayout
zuzugreifen? Es muss rows = 10
und cols = 10
zurückgeben.
Danke, es löste mein Problem. Kannst du mir sagen, warum die Methode 'on_my_layout' zuerst aufgerufen wird als'__init__'? – Caaarlos
@Caaarlos nicht die Methode, _die Zuweisung ist first_. Die Methode wird aufgerufen, wenn Sie 'my_layout' ändern, das in .py eine' ObjectProperty' ist. Wenn Sie also etwas in .kv zuweisen, wird Ihr 'on_my_layout' ausgeführt und etwas ausgedruckt. Aus diesem Grund müssen Sie warten, bis das Widget initialisiert ist, und dann einer Variablen ein initialisiertes (aktuelles) Widget zuweisen, das Ihre Funktion aufruft. Der erste Code in meiner Antwort: Widget ist nicht vorhanden, wenn 'my_layout: my_layt'. – KeyWeeUsr
Danke, jetzt weiß ich, was auf meinem Code passiert! – Caaarlos