Объединенный объект GridLayout не имеет заголовка атрибута, используя Kivy - PullRequest
0 голосов
/ 29 декабря 2018

Я собираю графический интерфейс с 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?

РЕДАКТИРОВАТЬ:

Благодаря комментариям ниже я понял, что моя минималистическая версия кода была не тольконеверно, но пропустил реальную суть проблемы, которая была о наименовании классов.Я обновляю вопрос, прежде чем дать свой собственный ответ.

1 Ответ

0 голосов
/ 02 января 2019

Проблема не имеет ничего общего с конкатенацией, а с именами.

Класс SettingsPanel уже определен в Kivy , и его переопределение затеняет оригинал, вызывая, что не удивительно, всепроблемы с парсером.

Мое решение состояло в том, чтобы просто вызвать мой класс SettingsSubPanel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...