Kivy ScreenManager вообще ничего не делает

#kivy #kivy-language

#киви #киви-язык #kivy #kivy-language

Вопрос:

У меня есть действительно базовая программа Kivy, в которой есть только базовый screenmanager и кнопки для переключения между экранами, за исключением того, что screenmanager не работает. Вот файл Python:

 from kivy.app import App
from kivy.lang import Builder
from kivy.uix.widget import Widget
from kivy.uix.screenmanager import ScreenManager, Screen


class WindowManager(ScreenManager):
    pass

class LoginPage(Screen, Widget):
    pass

class CreateAccountPage(Screen, Widget):
    pass


kv = Builder.load_file('the.kv')
class TheApp(App):
    def build(self):
        return LoginPage()

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

Вот файл .kv:

 WindowManager:
    LoginPage:
    CreateAccountPage:

<LoginPage>
    name: 'log'
    Button:
        text: 'log'
        on_release: app.root.current = 'create'

<CreateAccountPage>
    name: 'create'
    Button:
        text: 'create'
        on_release: app.root.current = 'log'

  

Когда я нажимаю на кнопку, она не переводит меня на следующую страницу, она просто ничего не делает.

Ответ №1:

Файл kv загружается дважды (один раз неявно с соглашением об именовании по умолчанию, а другой с явным kv = Builder.load_file('the.kv') ). Кроме того, LoginPage экран внедряется методом call return LoginPage() in build . Чтобы исправить это, вы можете присвоить файлу kv любое имя, отличное от имени по умолчанию. Ниже приведен исправленный фрагмент проблемного блока:

 kv = Builder.load_file('the1.kv')
class TheApp(App):
    def build(self):
        return kv
  

Здесь файл kv переименован в the1.kv .

Остальная часть кода в порядке.