1
在我們的應用程序中,我們有一個GameScreen,它具有一個顯示玩家得分(GameScreen_player1_score)的NumericProperty對象。在單獨的ClueScreen上(使用kivy Screen Manager),我們有一個ClueAnswerButton1,它可以在按下GameScreen時改變玩家的分數。當用戶在ClueScreen上按下正確的ClueAnswerButton1時,我們如何在GameScreen上更改玩家得分的得分屬性?如何通過在其他屏幕中按按鈕來更改kivy NumericProperty對象atrribute
我們試圖創造從GameScreen拉ClueScreen一個player1_score變量,但得到的錯誤:
TypeError: attribute name must be string, not 'int'
main.py代碼是在這裏:
class GameScreen(Screen):
GameScreen_player1_score = NumericProperty(0)
...
class ClueScreen(Screen):
...
def check_choice(self):
player1_score = self.manager.get_screen('game_home').GameScreen_player1_score
if self.choice0.state == 'down':
if self.choice0.text == self.correct:
self.message.text = "[color=006600]Correct! Click back to game and keep" \
"playing![/color]"
self.choice0.background_disabled_down = 'atlas://img/myatlas/green_button5'
setattr(self,player1_score, +10)
return
else:
self.message.text = "Try again"
self.choice0.background_disabled_down = 'atlas://img/myatlas/red_button5'
self.choice0.disabled = True
class GameApp(App):
sm = ScreenManager()
use_kivy_settings = False
def build(self):
self.sm.add_widget(GameScreen(name='game_home'))
self.sm.add_widget(SheddClue0Screen(name='game_clue0'))
return self.sm
if __name__ == '__main__':
GameApp().run()
bingo.kv代碼在這裏:
<GameScreen>:
GeneralFloatLayout:
GeneralAnchorLayout:
GeneralBoxLayout:
ScoreGridLayout:
ScoreBoardLabel:
text: '[color=0046C3]Player 1[/color]'
ScoreBoardLabel:
text: str(root._player1_score)
<ClueScreen>:
message: message
choice0: choice0
choice1: choice1
choice2: choice2
choice3: choice3
ClueBoxLayout:
ClueLabel:
text: "[color=0046C3]" + "Put label Here" + "[/color]"
ClueMessage:
id: message
ClueAnswerButton1:
id: choice0
on_press: root.check_choice()
ClueAnswerButton1:
id: choice1
on_press: root.check_choice()
ClueAnswerButton1:
id: choice2
on_press: root.check_choice()
ClueAnswerButton1:
id: choice3
on_press: root.check_choice()
ClueGridLayout:
ReturnButton:
text: 'Back to game'
on_press: root.manager.current = 'game_home'