ScreenManager, вложенный внутри BoxLayout, не отображается

Я экспериментирую с Kivy и пытаюсь вставить экземпляр ScreenManager внутри BoxLayout. Проблема, с которой я столкнулась, заключается в том, что ScreenManager и его экран не отображаются, когда ScreenManager является дочерним виджетами BoxLayout.

Этот код показывает черный экран.

from kivy.app import App from kivy.uix.boxlayout import BoxLayout from kivy.uix.label import Label from kivy.uix.screenmanager import Screen, ScreenManager class MenuScreen(Screen): def __init__(self, **kwargs): super(Screen, self).__init__(**kwargs) self.add_widget(Label(text="Some text.")) screen_manager = ScreenManager() screen_manager.add_widget(MenuScreen(name="menu")) class Container(BoxLayout): def __init__(self, **kwargs): super(BoxLayout, self).__init__(**kwargs) self.add_widget(screen_manager) class NestedScreenManagerApp(App): def build(self): """ :return: a BoxLayout with the screen manager nested inside it """ return Container() if __name__ == "__main__": NestedScreenManagerApp().run() 

С другой стороны, этот код (который возвращает ScreenManager непосредственно в виде корневого виджета) работает, и видны MenuScreen и его ярлык. Возвращение ScreenManager в качестве корневого виджета – это то же, что и в примере с примером приложения для экранного менеджера .

 from kivy.app import App from kivy.uix.label import Label from kivy.uix.screenmanager import Screen, ScreenManager class MenuScreen(Screen): def __init__(self, **kwargs): super(Screen, self).__init__(**kwargs) self.add_widget(Label(text="Some text.")) screen_manager = ScreenManager() screen_manager.add_widget(MenuScreen(name="menu")) class RootScreenManagerApp(App): def build(self): """ :return: the screen manager directly """ return screen_manager if __name__ == "__main__": RootScreenManagerApp().run() 

Как я могу заставить ScreenManager и его экран быть видимыми, когда это дочерний виджет моего контейнера (BoxLayout)? Я думаю, что мне не хватает чего-то очень простого.

Я использую Kivy 1.8.0 на Python 2.7.9, работая на Debian Jessie.

One Solution collect form web for “ScreenManager, вложенный внутри BoxLayout, не отображается”

Я нашел решение; проблема заключалась в том, что я вызывал super(BoxLayout, self) вместо super(Container, self) в моем Container.__init__ method. Как только я изменил это, ScreenManager и его экран стали видны внутри контейнера.

  • Как я могу обойти ошибку модуля kivy: ImportError: Ошибка загрузки DLL: указанного модуля не удалось найти?
  • Показывать значение слайдера kivy при изменении
  • Форматирование всплывающего окна Kivy для исключения всплывающего окна
  • Как получить исполняемый файл Windows из моего приложения kivy (Pyinstaller)?
  • Взаимодействие между виджетами Kivy в Python
  • Как скрыть ActionButton в Киви?
  • Удалите или замените экран заставки kivy при запуске
  • Kivy: изменение экранов в экранном менеджере с событием on_press
  • Обновить текст ярлыка при нажатии кнопки в Kivy для Python
  • Как обновить элементы Kivy из потока?
  • Kivy: как получить виджет по id (без kv)
  • Python - лучший язык программирования в мире.