У меня есть следующий код:Доступ Kivy размер макета в kvlang
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
class TestGUI(BoxLayout):
pass
class TestApp(App):
def build(self):
return TestGUI()
if __name__ == '__main__':
TestApp().run()
и соответствующий .kv
файл:
#:kivy 1.9.1
<TestGUI>:
temp_size: (0.5 * x for x in self.size)
canvas.before:
Color:
rgba: (1, 0, 0, 1)
Rectangle:
size: self.temp_size
код не запускается, метание:
TypeError: 'NoneType' object is not iterable
из-за последней строки кода в файле kv
. Похоже, что self.size
не инициализируется, когда объявляется temp_size
, но это вызывает несколько вопросов.
Почему я позволил перебирать
self.size
при объявленииtemp_size
если этоNoneType
объект?Кроме того, почему код работает отлично, когда я заменяю последнюю строку
size: (0.5 * x for x in self.size)
вместо использования переменной?Также, как я могу обойти эту проблему и назначить переменные на основе значения
self.size
?
это «корень» вместо «я»? https://kivy.org/docs/api-kivy.lang.html –
В этом случае они взаимозаменяемы, но я спрашиваю об общем случае. Например, если 'TestGUI' был вложен в' BoxLayout', тогда это будет 'self.size'. – Kootling