Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Kivy将小部件添加到屏幕_Python_Kivy - Fatal编程技术网

Python Kivy将小部件添加到屏幕

Python Kivy将小部件添加到屏幕,python,kivy,Python,Kivy,这似乎是个愚蠢的问题。但我有一个小部件,我想添加到一个叫做GameScreen的屏幕上 这是我的Python代码: class WelcomeScreen(Screen): pass class BasicScreen(Screen): pass class GameScreen(Screen): parent = Widget() game = ShootingGame() parent.add_widget(game) Clock.sch

这似乎是个愚蠢的问题。但我有一个小部件,我想添加到一个叫做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"
:
按钮:
文字:“了解触觉错觉”
大小提示:无,无
尺码:500、70
位置:100200
字体大小:30
发布时:app.root.current=“基本”
按钮:
文字:“玩我们的游戏”
大小提示:无,无
尺码:500、70
位置:100100
字体大小:30
发布时:app.root.current=“游戏”
:
名称:“基本”
:
名称:“游戏”
我得到的错误是这个。我想这是因为我已经为小部件游戏定义了一个父项。但是,我需要这个父控件,因为游戏小部件使用其父控件的宽度和高度值(例如self.parent.width)。是否有任何解决方法,以便游戏小部件可以嵌套在父部件中,并将父部件添加到屏幕上

kivy.uix.widget.WidgetException: Cannot add <Screen name='game'>, it already has a parent <kivy.uix.widget.Widget object at 0x1093dc8d8>
kivy.uix.widget.WidgetException:无法添加,它已具有父级

谢谢大家

在我看来,现在发生的事情是你试图给
GameScreen
一个家长两次。一次是告诉它的父对象是
Widget()
,另一次是将它添加到
ScreenManager
(这将使
sm
成为它的父对象)。无论哪一个先执行(我认为查看异常的
parent=Widget()
行)都会在您第二次尝试时导致错误。

您可以这样做

class GamesScreen(Screen):
    def __init__(self, **kwargs):
        super(GameScreen, self).__init__(**kwargs)
        self.game = ShootingGame()
        self.add_widget(self.game)
        clock.schedule_interval(self.game.update, 1.0 / 60.0)

当一个子部件添加到另一个小部件时,parent属性会自动设置为parent,因此在您的代码中覆盖parent属性并将其设置为widget(),当您将GameScreen添加到sm时,它会引发一个异常,即GameScreen已经有父部件,只需添加_小部件(游戏)即可。谢谢您的回答!这是有道理的。但是做添加小部件(游戏)给了我一个“名称”“添加小部件”没有定义“是!谢谢你,Flns!