#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
.
Остальная часть кода в порядке.