2014-09-05 33 views
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' 

回答

1

編輯您的check_choice方法如下:

def check_choice(self): 
    player1_score = self.manager.get_screen('game_home') 

    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(player1_score, 'GameScreen_player1_score', +10) 
      return 
     else: 
      self.message.text = "Try again" 
      self.choice0.background_disabled_down = 'atlas://img/myatlas/red_button5' 
      self.choice0.disabled = True 
相關問題