Python Kivy将小部件添加到屏幕
这似乎是个愚蠢的问题。但我有一个小部件,我想添加到一个叫做GameScreen的屏幕上 这是我的Python代码: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
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!