Я пробовал Runner (). Ids.manager.current = 'some_screen' в файле .py, но он не работает. Там даже не выдается ошибка. Экран вообще не меняется.
Работает отлично, просто не делает то, во что вы верите. Когда вы пишете Runner()
, вы получаете новый экземпляр класса Runner с его собственными дочерними элементами, включая собственный ScreenManager. Этот не имеет ничего общего с тем, который вы отображаете в графическом интерфейсе. Когда вы устанавливаете свойство current
, ScreenManager покорно меняет экран, просто у вас нет возможности это увидеть.
На самом деле вы хотите изменить current
свойство виджета, отображаемого в вашем графическом интерфейсе. Лучший способ сделать это зависит от контекста, который вы пропустили (всегда старайтесь привести пример с полным выполнением, не ясно, как выглядел ваш ошибочный код). Однако в этом случае экземпляр Runner является вашим корневым виджетом, который доступен с App.get_running_app().root
, поэтому вы можете написать App.get_running_app().root.ids.manager.current = 'some_screen'
. Опять же, могут быть более точные способы сделать это в зависимости от того, как вы структурируете свой код, но это всегда вариант.