from kivy.app import Appfrom kivy.uix.boxlayout import BoxLayoutfrom kivy.lang.builder import Builderfrom kivy.uix.widget import Widgetfrom kivy.clock import mainthread
from signin.signin import SigninWindowfrom settings.settings import SettingsWindow
class manager(BoxLayout):
widget_signin = SigninWindow() widget_settings = SettingsWindow()
@mainthread def on_enter(self, **kwargs): super().__init__(**kwargs)
self.ids.screen_signin.add_widget(self.widget_signin) self.ids.screen_settings.add_widget(self.widget_signin)
class main(App): def build(self): return manager()
if __name__ == "__main__": main().run()
<manager>: id: main_window
ScreenManager: id: scrn_mngr_main
Screen: id: screen_signin name: "screen_signin" Screen: id: screen_settings name: "screen_settings"
from kivy.app import Appfrom kivy.uix.boxlayout import BoxLayoutfrom kivy.lang.builder import Builderfrom kivy.uix.widget import Widget
Builder.load_file("signin/signin.kv")
class Signin(BoxLayout): def __init__(self, **kwargs): super().__init__(**kwargs)
class SigninWindow(App): def build(self): return Signin()
if __name__=="__main__": sw=SigninWindow() sw.run()
<Signin>: canvas.before: Color: rgba: (1,1,1, 1) Rectangle: size: self.size pos: self.pos Button: text: "Hello"
from kivy.app import Appfrom kivy.uix.boxlayout import BoxLayoutfrom kivy.lang.builder import Builderfrom kivy.uix.widget import Widget
class Settings(BoxLayout): def __init__(self, **kwargs): super().__init__(**kwargs)
class SettingsWindow(App): def build(self): return Settings()
if __name__=="__main__": sw=SettingsWindow() sw.run()
A kivy program only has one App instance, and only on Window. There can be multiple screens. A screen can be all of a window or just a part of a window.
Here are some changes so you can see your Signin Screen. You can make similar changes to get the settings screen working.
Main.py
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
import signin.signin
# from settings.settings import SettingsWindow
class manager(BoxLayout):
pass
# widget_signin = SigninWindow() This is what you are doing in KV
# widget_settings = SettingsWindow()
#
# @mainthread
# def on_enter(self, **kwargs): on_enter is a screen event, not a BoxLayout event
# super().__init__(**kwargs)
#
# self.ids.screen_signin.add_widget(self.widget_signin)
# self.ids.screen_settings.add_widget(self.widget_signin)
class main(App):
def build(self):
return manager()
if __name__ == "__main__":
main().run()
Main.kv
<manager>:
id: main_window
ScreenManager:
id
: scrn_mngr_main
Signin: # made Signin a screen in signin.py
id: screen_signin
name: "screen_signin"
# Screen: # you can do something similar for settings…
# id: screen_settings
# name: "screen_settings"
Signin.py
from kivy.app import App
# from kivy.uix.boxlayout import BoxLayout
from kivy.lang.builder import Builder
#from kivy.uix.widget import Widget
from kivy.uix.screenmanager import Screen
Builder.load_file("signin/signin.kv")
class Signin(Screen):
def __init__(self, **kwargs):
super().__init__(**kwargs)
if __name__=="__main__": # move app below the if, and you can still use this file for a standalone test.
class SigninWindow(App):
def build(self):
return Signin()
sw=SigninWindow()
sw.run()
The file signin.kv unchanged.
--
You received this message because you are subscribed to the Google Groups "Kivy users support" group.
To unsubscribe from this group and stop receiving emails from it, send an email to kivy-users+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/kivy-users/088735eb-1d87-40fc-81d5-d5ba2190e057o%40googlegroups.com.