Как сделать второй экран для вывода принтов Kivy

Нyжно ,что бы при нажатие на кнопкy 'Start' приложение переходило на второй экран и выводило 'Hi'

Main.py:

from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
    
    
    class Scr1(BoxLayout):
        def Hi(self):
            While True:
                print('Hi')
    
    class Scr2():
        pass
    
    class MyApp(App):
    
        def build(self):
            box = BoxLayout()
            button1 = Button(text="start")
            box.add_widget(button1)
            return box
    
    if __name__ == "__main__":
        MyApp().run()

.kv:

<Scr1>
    Button:
        size: 100,30
        text: "start"
        on_press:
            root.Hi()

Ответы (1 шт):

Автор решения: igorzyden

print('Hi') и вывод слова "Hi" в окне - это абсолютно разные процессы, не имеющие ничего общего.

Чтобы в стартовом окне создать кнопку "start" - не нужно делать двойную работу. Либо в файле *.py через функцию и команду add_widget, либо прямо в файле *.kv

Ну и в файле *.kv создать еще один виджет, который и будет тем самым заветным окном с текстом "Hi".

Рабочий пример программы из двух файлов ниже

Файл Main.py

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
    

class ScreenManager(ScreenManager):
    pass
    
class Scr1(Screen):
    pass
    
class Scr2(Screen):
    pass

kv = Builder.load_file("My.kv")

    
class MyApp(App):
    def build(self):
        return kv
    
MyApp().run()

Файл My.kv

ScreenManager:
    Scr1:
    Scr2:


<Scr1>:
    name: "scr1"

    BoxLayout:
        Button:
            size: 100,30
            text: "start"
            on_press: root.manager.current = 'scr2'



    <Scr2>
        name: "scr2"
    
        BoxLayout:
            Label:
                text: "Hi"
→ Ссылка