使用Kivy的串联GridLayout对象没有属性标题

时间:2018-12-28 22:01:22

标签: python kivy

我正在将Kivy与GUI集成在一起,以用于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()相关的错误/ p>

...
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'

出什么问题了?

Kivy在解析Label代码时是否遇到问题?如果是这样,为什么它没有得到我提供的text字段?为什么第一个SubGrid没问题?

编辑:

由于下面的注释,我意识到我的代码的简约版本不仅不正确,而且错过了问题的实际核心,即有关类的命名。在提供自己的答案之前,我正在更新问题。

1 个答案:

答案 0 :(得分:0)

问题与串联无关,而与命名有关。

SettingsPanel已经是defined in Kivy,并且对其进行重新定义将其遮盖起来,从而对解析器造成各种问题也就不足为奇了。

我的解决方案是直接调用类SettingsSubPanel