我正在尝试在两个屏幕之间切换。.但是它不起作用..它没有显示任何内容或任何错误,我不知道这是什么问题,这是我的代码
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"
答案 0 :(得分:0)
您的代码中有几个问题。
build()
方法返回mainWindow()
。这意味着您的应用程序GUI仅包含Screen
(mainwindow
),而没有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"
答案 1 :(得分: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