Search code examples
pythonpython-3.xkivynonetype

Getting " TypeError: 'NoneType' object is not subscriptable" error


I have the following Python code and Kivy configuration file, taken directly from a tutorial:

import kivy
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.properties import ObjectProperty
from kivy.lang import Builder
from kivy.core.window import Window

Builder.load_file('float_layout.kv')

class MyLayout(Widget):
    pass

class AwesomeApp(App):
    def build(self):
        Window.clearcolor = (1,1,1,1)
        return MyLayout()

if __name__ == '__main__':
    AwesomeApp().run()
<Button>
    font_size: 32
    size_hint: (0.3, 0.3)

<MyLayout>

    FloatLayout:
        size: root.width, root.height

            Button:
                text: "q1"

            Button:
                text: "q2"

            Button:
                text: "C"

            Button:
                text: "q3"

            Button:
                text: "q4"

I get the following error message:

[INFO   ] [Window      ] virtual keyboard not allowed, single mode, not docked
 Traceback (most recent call last):
   File "/Users/JIM/PycharmProjects/test_float/main.py", line 8, in <module>
     Builder.load_file('float_layout.kv')
   File "/Users/JIM/PycharmProjects/test_float/venv/lib/python3.9/site-packages/kivy/lang/builder.py", line 306, in load_file
     return self.load_string(data, **kwargs)
   File "/Users/JIM/PycharmProjects/test_float/venv/lib/python3.9/site-packages/kivy/lang/builder.py", line 373, in load_string
     parser = Parser(content=string, filename=fn)
   File "/Users/JIM/PycharmProjects/test_float/venv/lib/python3.9/site-packages/kivy/lang/parser.py", line 402, in __init__
     self.parse(content)
   File "/Users/JIM/PycharmProjects/test_float/venv/lib/python3.9/site-packages/kivy/lang/parser.py", line 511, in parse
     objects, remaining_lines = self.parse_level(0, lines)
   File "/Users/JIM/PycharmProjects/test_float/venv/lib/python3.9/site-packages/kivy/lang/parser.py", line 614, in parse_level
     _objects, _lines = self.parse_level(
   File "/Users/JIM/PycharmProjects/test_float/venv/lib/python3.9/site-packages/kivy/lang/parser.py", line 674, in parse_level
     if current_property[:3] == 'on_':
 TypeError: 'NoneType' object is not subscriptable

What is wrong?


Solution

  • You have wrong indentations. size: and Button: have to start in the same column.

    <Button>
        font_size: 32
        size_hint: (0.3, 0.3)
    
    <MyLayout>
        FloatLayout:
            size: root.width, root.height
            Button:
                text: "q1"
            Button:
                text: "q2"
            Button:
                text: "C"
            Button:
                text: "q3"
            Button:
                text: "q4"