Kivy将小工具添加到屏幕

时间:2015-06-03 23:03:52

标签: python kivy

这似乎是一个愚蠢的问题。但我有一个小部件,我想添加到名为GameScreen的屏幕。

这是我的Python代码:

class WelcomeScreen(Screen):
    pass

class BasicScreen(Screen):
    pass

class GameScreen(Screen):
    parent = Widget()
    game =  ShootingGame()
    parent.add_widget(game)
    Clock.schedule_interval(game.update, 1.0 / 60.0)
    # return parent

sm = ScreenManager()
sm.add_widget(WelcomeScreen(name='welcome'))
sm.add_widget(BasicScreen(name='basic'))
sm.add_widget(GameScreen(name='game'))

class ShootingApp(App):
    def build(self):
        print(sm.current)
       return sm

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

这是我的kivy代码:

<WelcomeScreen>:
Button:
    text: "Learn about haptic illusions"
    size_hint: None, None
    size: 500, 70
    pos: 100, 200
    font_size: 30
    on_release: app.root.current = "basic"

Button:
    text: "Play our game"
    size_hint: None, None
    size: 500, 70
    pos: 100, 100
    font_size: 30
    on_release: app.root.current = "game"

<BasicScreen>:
name: "basic"

<GameScreen>:
name: "game"

我得到的错误就是这个。而且我认为这是因为我已经为小部件游戏定义了父级。但是,我需要父母,因为游戏小部件使用其父级的宽度和高度值(例如,self.parent.width)。有没有解决方法,以便游戏小部件可以嵌套在父级并将父级添加到屏幕?

kivy.uix.widget.WidgetException: Cannot add <Screen name='game'>, it already has a parent <kivy.uix.widget.Widget object at 0x1093dc8d8>

谢谢你们!

2 个答案:

答案 0 :(得分:1)

在我看来,正在发生的事情是你试图给GameScreen父母两次。一旦告诉它它的父亲是Widget(),当你将它添加到ScreenManager时(这将使sm成为父母)。首先执行它们中的任何一个(我认为查看异常时的parent = Widget()行)在第二次尝试时会导致错误。

答案 1 :(得分:1)

你可以做这样的事情

header {
    height: 100%;
    position: relative;
    overflow: hidden;
    background: url(http://s6.postimg.org/j8n8hawrl/Flower.png) center no-repeat;
    /* Image Credit: Unsplash.me */
    background-size: cover;

}//NOT CLOSED IN JSFIDDLE
    .content {