user13845246
user13845246

Reputation:

python screenmanager (kivy)

`from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.gridlayout import GridLayout
from kivy.uix.screenmanager import ScreenManager, Screen

class Login(Screen):
    def main(self):
        layout = GridLayout()
        def btn():
            sm.switch_to(Screen(name='account'))
        self.bt = Button(text='tela 1',
                         size_hint=(None,None),
                         size=(592,86),
                         pos=(50,50), on_press=btn,
                         background_color=(1,0,0,0))
        layout.add_widget(self.bt)
        return layout
    
class Account(Screen):
    def main2(self):
        lt = GridLayout()
        def btnn():
            sm.switch_to(Screen(name='login'))
        self.btt = Button(text='telaa 2',
                         size_hint=(None,None),
                         size=(592,86),
                         pos=(50, 50), on_press=btnn,
                         background_color=(1,0,0,0))
        lt.add_widget(self.btt)
        return lt

sm = ScreenManager()
sm.add_widget(Login(name='login'))
sm.add_widget(Account(name='account'))

class TestApp(App):

    def build(self):
        return sm

if _name_ == '_main_':
    TestApp().run()

`I started with kivy today, but as it is only a passing novel, I do not intend to learn kivy language.

All the tutorials I see on the internet about screen manager use kivy language. How do I scroll through 2 screens using only python? I tried to translate from kivy language to python but all I got was a black screen.

Upvotes: 0

Views: 543

Answers (1)

furas
furas

Reputation: 142631

This is minimal example which uses Python code (not kv language) to create Screen with Button which changes screen in screen manager.

from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.boxlayout import BoxLayout

# Declare both screens

class MenuScreen(Screen):
    
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

        self.layout = BoxLayout()
        self.add_widget(self.layout)

        self.label = Label(text='Menu Screen')        
        self.layout.add_widget(self.label)

        self.button = Button(text='Go To Settings')
        self.button.bind(on_press=self.change_screen)
        self.layout.add_widget(self.button)
        
    def change_screen(self, event):
        #sm.current = 'settings'
        self.manager.transition.direction = 'up'
        self.manager.transition.duration = 3 # 3 seconds
        self.manager.current = 'settings'
        
class SettingsScreen(Screen):
    
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

        self.layout = FloatLayout()
        self.add_widget(self.layout)

        self.label = Label(text='Settings Screen')        
        self.layout.add_widget(self.label)

        self.button = Button(text='Go To Menu', size_hint=(.5, .10), pos=(20, 20))
        self.button.bind(on_press=self.change_screen)
        self.layout.add_widget(self.button)

    def change_screen(self, event):
        #sm.current = 'menu'
        self.manager.transition.direction = 'right'
        self.manager.transition.duration = 0.5 # 0.5 second
        self.manager.current = 'menu'

# Create the screen manager

sm = ScreenManager()
sm.add_widget(MenuScreen(name='menu'))
sm.add_widget(SettingsScreen(name='settings'))


class TestApp(App):

    def build(self):
        return sm


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

Based on example (which uses kv language) from documentation Screen Manager

Upvotes: 1

Related Questions