簡體   English   中英

如何在kivy python中的兩個屏幕之間切換?

[英]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 僅包含一個沒有ScreenManagerScreenmainwindow )。 因此,您的kvroot.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM