ixzor
ixzor

Reputation: 57

How to make kivy app from different py files

I am trying to make an app out of different .py files. But I don't know how to add them together, I have one main file, and one login file with plans to add a lot more, but with these I'm experimenting right now. They are pretty basic for now until I figure out this "bonding" between them and then I will start adding some more complex stuff. I tried couple of things and they didn't work, but I left them in code for you to see (I tried to make the app to start with MainWindow, and on press of the first button it goes to login page*). Here's the code and please help me.

*Right now when I press the button it gives me this error: OSError: exception: access violation writing 0x0000000080006010

this is main.py:

from kivy.lang import Builder
from kivy.app import App
import login
from kivy.uix.screenmanager import Screen

kv = Builder.load_string('''
<MainWindow>:
    GridLayout:
        cols:1
        GridLayout:
            rows:5
            Button:
                text:"NOVA ROBA"
                on_release:
                    root.call_login()

            Button:
                text:"KUPCI"

            Button:
                text:"PRODATO"

            Button:
                text: "AGRONOMI"
            Button:
                text: "STANJE U MAGACINU"
''')


class MainWindow(Screen):
    def call_login(self):
        login.app().run()
    pass

class main_app(App):
    def build(self):
        return MainWindow()

if __name__ == '__main__':
    main_app().run()

this is login.py:

from kivy.lang import Builder
from kivy.uix.screenmanager import Screen
from kivy.app import App

class Login(Screen, App):
    def build(self):
        return
    pass

kv = Builder.load_string('''
<Login>:
    name:"login"
    GridLayout:
        rows:2
        GridLayout:
            cols:2
            Label:
                text:"Password: "
            TextInput:
                id:passwd
                multiline: False
        Button:
            text: "Submit"
            on_release:
                passwd.text = ""
    ''')


class app(App):
    def build(self):
        return Login()

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

Upvotes: 1

Views: 548

Answers (1)

Yash Kolekar
Yash Kolekar

Reputation: 270

You are creating 2 apps, which is not needed. Instead of inheriting from both Screen and App in the Loginscreen, inherit only from Screen. Then create a ScreenManager in your main.py's build method and then add the imported loginscreen as a widget, to switch to the new screen, use self.manager.current = "login" in the call_login method of MainWindow

class app(App):
    def build(self):
        sm = ScreenManager()
        sm.add_widget(MainWindow())
        sm.add_widget(Login())
        return sm

Upvotes: 1

Related Questions