Search code examples
python-3.xtextlabelbindkivy

How to load string from text file to kivy label, Python 3.5


I've been searching around for answers on stackoverflow for a couple of days now to be honest but I could not find the thing for me, lets say I have a text file named bind.txt with a couple lines of text, how can i load that text file to a kivy label? be it directly or indirectly. I've been trying to teach myself python and this is kind of in the way of me building my first app. Thank you in advance, and heres the code.

    from kivy.app import App
    from kivy.uix.label import Label
    from kivy.uix.scrollview import ScrollView
    from kivy.uix.widget import Widget
    from kivy.uix.boxlayout import BoxLayout
    from kivy.lang import Builder
    from kivy.properties import StringProperty
    from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition

    class MainScreen(Screen):
        pass

    class MainLabel(ScrollView):
        text = StringProperty("")

    class ScreenManagement(ScreenManager):
        pass

    presentation = Builder.load_file("bind.kv")

    class MainApp(App):

        def build(self):
            return presentation

    if __name__ == "__main__":
        MainApp().run()

And the kv file.

    #: import FadeTransition kivy.uix.screenmanager.FadeTransition

    ScreenManagement:
        transition: FadeTransition()
        MainScreen:


    <MainLabel>:  
        text: #bind.txt here, somehow..
        Label:
            text: root.text
            font_size: 15
            text_size: self.width, None           
            size_hint_y: None
            height: self.texture_size[1]


    <MainScreen>:
        name: "main"
        canvas.before:
            Rectangle:
                pos: self.pos
                size: self.size
                source: 'img/Fundal.png'
        MainLabel

Solution

  • You can open file in reading mode, store contents in a variable and assign it to the text property.

    For an example

    with open("bind.txt") as f:
        contents = f.read()
        main_label.text = contents # main_label is an instance of kivy's Label class.