微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在kivy python的两个屏幕之间切换?

如何解决如何在kivy python的两个屏幕之间切换?

我正在尝试在两个屏幕之间切换。.但是它不起作用..它没有显示任何内容或任何错误,我不知道这是什么问题,这是我的代码

from kivy.app import App
from kivy.uix.screenmanager import ScreenManager,Screen


class mainWindow(Screen):
    pass


class secondWindow(Screen):
    pass


class windowManager(ScreenManager):
    pass

sm = ScreenManager()
sm.add_widget(mainWindow(name='main'))
sm.add_widget(secondWindow(name='second'))


class multApp(App):
    def build(self):
        return mainWindow()


if __name__ == "__main__":
    multApp().run()

和mult.kv

windowManager:
    mainWindow:
    secondWindow:

<mainWindow>:
    name: "main"

    Button:
        text: "Submit"
        on_press : root.manager.current = "second"

<secondWindow>:
    name: "second"

    Button:
        text: "go back"
        on_press : root.manager.current = "main"

解决方法

您的代码中有几个问题。

  • 您的build()方法返回mainWindow()。这意味着您的应用程序GUI仅包含Screenmainwindow),而没有ScreenManager。因此,root.manager.current =中的kv行将因为没有管理员而失败。
  • 您的mult.kv文件包含用于构建GUI的规则(windowManager:),但是您的build()方法覆盖了此规则。
  • 在您的代码中,您有三行(以sm = ScreenManager()开头)也可以构建GUI,但是对这些行的结果不做任何事情。因此这些行无效。
  • 您的班级名称应以大写字母开头。照原样使用kv时,这是必需的。

考虑到所有这些,这是您的代码的修改后的版本,应该可以使用:

python代码:

from kivy.app import App
from kivy.uix.screenmanager import ScreenManager,Screen

class MainWindow(Screen):
    pass


class SecondWindow(Screen):
    pass


class WindowManager(ScreenManager):
    pass

# sm = ScreenManager()
# sm.add_widget(mainWindow(name='main'))
# sm.add_widget(secondWindow(name='second'))


class multApp(App):
    pass
    # def build(self):
    #     return mainWindow()


if __name__ == "__main__":
    multApp().run()

mult.kv:

WindowManager:
    MainWindow:
    SecondWindow:

<MainWindow>:
    name: "main"

    Button:
        text: "Submit"
        on_press : root.manager.current = "second"

<SecondWindow>:
    name: "second"

    Button:
        text: "go back"
        on_press : root.manager.current = "main"
,

我同意约翰的回答,仅此补充。如果您将经理声明为一类,我总是在构建方法中返回经理,这也是在根管理器下为屏幕创建ID的良好做法,因为这样会使它们更易于引用

<WindowManager>:
    id: screen_manager

    MainWindow:

         id: main_window
         name: "main_window"
         manager: screen_manager   

    SecondWindow:

         id: second_window
         name: "second_window"
         manager: screen_manager 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。