2017-04-18 99 views
1

我只是想讓代碼工作在Python Kivy應用程序中有兩個屏幕可以來回切換,而不使用.kv文件。使用Python Kivy難以製作多個屏幕

在此頁面:https://kivy.org/docs/api-kivy.uix.screenmanager.html,從頂部代碼的第二塊就是我試圖完成,但我想這樣做沒有「Builder.load_string(‘’「」部分,取而代之的只是實例。通常按鈕

這是我在嘗試這樣做,但我不能得到它的工作:

from kivy.app import App 
from kivy.lang import Builder 
from kivy.uix.screenmanager import ScreenManager, Screen 
from kivy.uix.floatlayout import FloatLayout 
from kivy.uix.label import Label 
from kivy.uix.button import Button 

class MenuScreen(Screen): 
    def build(self): 

     def switchScreen(): 
      root.manager.current = 'settings' 

     f = FloatLayout() 

     button1 = Button(text = "My settings button") 
     button2 = Button(text = "Back to menu", on_press = switchScreen) 

     f.add_widget(button1) 
     f.add_widget(button2) 

class SettingsScreen(Screen): 
    def build(self): 

     def switchScreen(): 
      root.manager.current = 'menu' 

     f = FloatLayout() 

     button1 = Button(text = "My settings button") 
     button2 = Button(text = "Back to menu", on_press = switchScreen) 

     f.add_widget(button1) 
     f.add_widget(button2) 

sm = ScreenManager() 
sm.add_widget(MenuScreen(name='menu')) 
sm.add_widget(SettingsScreen(name='settings')) 

class MainApp(App): 
    def build(self): 
     return sm 

if __name__ == '__main__': 
    MainApp().run() 

運行這段代碼只是創建產生任何錯誤空白頁

是有辦法指定它畫一個特定的屏幕開始,我失蹤了?我不確定我的問題在哪裏。

回答

0

你做了什麼錯:

  • 如果你想創建Python代碼Widget內容,你應該把它裏面的Widget __init__方法,不build
  • 你正在創建一個佈局,然後將其丟棄。您需要使用self.add_widget(f)在創建後實際使用它
  • 您綁定到了switchScreen方法,因此它需要接受調用方小部件作爲參數。或者你可以簡單地使用*args而不用擔心它。你不在kv了,所以沒有根。改爲使用self

把所有這些組合起來:

from kivy.app import App 
from kivy.lang import Builder 
from kivy.uix.screenmanager import ScreenManager, Screen 
from kivy.uix.floatlayout import FloatLayout 
from kivy.uix.label import Label 
from kivy.uix.button import Button 

class MenuScreen(Screen): 
    def __init__(self, **kwargs): 
     super(MenuScreen, self).__init__(**kwargs) 

     def switchScreen(*args): 
      self.manager.current = 'settings' 

     f = FloatLayout() 

     button1 = Button(text = "My settings button") 
     button2 = Button(text = "Back to menu", on_press = switchScreen) 

     f.add_widget(button1) 
     f.add_widget(button2) 

     self.add_widget(f) 

class SettingsScreen(Screen): 
    def __init__(self, **kwargs): 
     super(SettingsScreen, self).__init__(**kwargs) 

     def switchScreen(*args): 
      self.manager.current = 'menu' 

     f = FloatLayout() 

     button1 = Button(text = "My settings button") 
     button2 = Button(text = "Back to menu", on_press = switchScreen) 

     f.add_widget(button1) 
     f.add_widget(button2) 
     self.add_widget(f) 

sm = ScreenManager() 
sm.add_widget(MenuScreen(name='menu')) 
sm.add_widget(SettingsScreen(name='settings')) 

class MainApp(App): 
    def build(self): 
     return sm 

if __name__ == '__main__': 
    MainApp().run() 
+0

謝謝sooooooooooooo多<3 – Anthony1617