2017-04-18 100 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