Я собираю графический интерфейс с Kivy для программы Python (3.5).Я объединяю GridLayout
объекты для построения сеток внутри сеток.Вот упрощенная версия моего кода:
class SettingsPanel(GridLayout):
def __init__(self, *args):
GridLayout.__init__(self, cols=2);
self.add_widget(Label(text='SubSubFoo'))
self.add_widget(Label(text='SubSubFoo2'))
class Panel(GridLayout):
def __init__(self, *args):
GridLayout.__init__(self, cols=1);
self.add_widget(Label(text='SubFoo'))
self.my_second_layer_grid = SubSubGrid()
self.add_widget(self.my_second_layer_grid)
class GUI(App):
def build(self):
self.title = "My app"
layout = GridLayout(cols=2)
layout.add_widget(Label(text='Foo'))
self.my_panel = SubGrid()
layout.add_widget(self.my_panel)
return layout
if __name__ == '__main__':
GUI().run()
Хотя мне успешно удалось работать с тем, что я здесь называю SubGrid
, в тот момент, когда я вставляю SubSubGrid
в предыдущем, я получаю этоошибка, связанная с звонком self.my_second_layer_grid = SubSubGrid()
...
BuilderException: Parser: File "C:\Users\me\AppData\Local\Continuum\anaconda3\envs\myenv\lib\site-packages\kivy\data\style.kv", line 871:
...
869: Label:
870: size_hint_y: None
>> 871: text: root.title
872: text_size: self.width - 32, None
873: height: max(50, self.texture_size[1] + 20)
...
AttributeError: 'SettingsPanel' object has no attribute 'title'
В чем проблема?
Есть ли у Киви проблемы с анализом кода Label
s?Если так, почему он не получает поле text
, которое я предоставляю?И почему это не проблема с первым SubGrid
?
РЕДАКТИРОВАТЬ:
Благодаря комментариям ниже я понял, что моя минималистическая версия кода была не тольконеверно, но пропустил реальную суть проблемы, которая была о наименовании классов.Я обновляю вопрос, прежде чем дать свой собственный ответ.