[英]how to switch between two screens in 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 僅包含一個沒有ScreenManager
的Screen
( mainwindow
)。 因此,您的kv
的root.manager.current =
行將失敗,因為沒有經理。mult.kv
文件包含用於構建 GUI 的規則 ( windowManager:
),但此規則已被您的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"
我同意約翰的回答,只是補充一下。 如果您將管理器聲明為一個類,我總是在構建方法中返回管理器,這也是在根管理器下為屏幕創建 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.