如何在kivy python中的两个屏幕之间切换?
Posted
技术标签:
【中文标题】如何在kivy python中的两个屏幕之间切换?【英文标题】:how to switch between two screens in kivy python? 【发布时间】:2020-11-10 13:05:08 【问题描述】:我正在尝试在两个屏幕之间切换.. 但它不起作用.. 它没有显示任何内容或任何错误我不知道是什么问题,这是我的代码
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"
【问题讨论】:
【参考方案1】:您的代码中有几个问题。
您的build()
方法返回mainWindow()
。这意味着您的应用程序 GUI 仅包含 Screen
(mainwindow
) 而没有 ScreenManager
。因此,kv
中的 root.manager.current =
行将失败,因为没有经理。
您的 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"
【讨论】:
【参考方案2】:我同意约翰的回答,只是补充一下。如果你将 manager 声明为一个类,我总是在构建方法中返回 manager,这也是在你的 root manager 下为你的屏幕创建 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
【讨论】:
以上是关于如何在kivy python中的两个屏幕之间切换?的主要内容,如果未能解决你的问题,请参考以下文章