0

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

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"
4

2 回答 2

0

我同意约翰的回答,只是补充一下。如果您将管理器声明为一个类,我总是在构建方法中返回管理器,这也是在您的根管理器下为您的屏幕创建 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 
于 2020-11-10T14:35:45.337 回答
0

您的代码中有几个问题。

  • 您的build()方法返回mainWindow(). 这意味着您的应用程序 GUI 仅包含一个Screen( mainwindow) 而没有ScreenManager. 所以root.manager.current =你的行kv会失败,因为没有经理。
  • 您的mult.kv文件包含windowManager:用于构建 GUI 的规则 ( ),但您的build()方法会覆盖此规则。
  • 在您的代码中,您有三行(以 开头sm = ScreenManager())也构建了 GUI,但您对这些行的结果不做任何事情。所以这些线没有效果。
  • 您的类名应以大写字符开头。当kv你使用时,这是一个要求。

考虑到所有这些,这是您的代码的修改版本,它应该可以工作:

蟒蛇代码:

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()

多重.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"
于 2020-11-10T14:03:16.370 回答