I am trying to get labels from a python file (labels.py) and inject these labels into a label inside of a kivy file (pong.kv).
# main.py
from kivy.app import App
from kivy.uix.widget import Widget
class PongGame(Widget):
pass
class PongApp(App):
def build(self):
return PongGame()
if __name__ == "__main__":
PongApp().run()
This is the labels.py file:
# labels.py
WORLD = "World"
And this is the kv file:
#: kivy 1.10.1
#: import labels pygame.labels
<PongGame>:
canvas:
Rectangle:
pos: self.center_x - 5, 0
size: 10, self.height
Label:
font_size: 70
center_x: root.width / 4
top: root.top - 50
text: WORLD
If I run the main.py file I get an error "NameError: name 'WORLD' is not defined". Replacing WORLD by "World" runs without any problems.
Assuming you do not have the pygame library installed (if you have the pygame library installed you will have a conflict in the import), the import into .kv complies with the same python rules according the docs, so your import into .kv:
#: import labels pygame.labels
it would translate into python in the following way:
from pygame.labels as labels
So, keeping in mind the above, the way to obtain "WORLD" is using the namespace, that is, labels.WORLD
. Consequently the .kv should be the following:
#: kivy 1.10.1
#: import labels pygame.labels
<PongGame>:
canvas:
Rectangle:
pos: self.center_x - 5, 0
size: 10, self.height
Label:
font_size: 70
center_x: root.width / 4
top: root.top - 50
text: labels.WORLD