Python Kivy:在Kivy的类中使用变量

时间:2018-05-09 21:01:52

标签: python kivy

我的代码变得非常密集,所以我希望通过使用变量来简化它,但它不起作用。以下是问题区域附近带注释的代码:

from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.button import Button
from kivy.core.image import Image
from kivy.graphics import Color, Rectangle
from kivy.core.audio import SoundLoader
from kivy.core.text import LabelBase

import pygame
from pygame.locals import*

import random

class RootScreen(ScreenManager):

    pass

class StartScreen(Screen):

    pass

class StartScreen(Screen):

    pass

class LevelsScreen(Screen):

    pass


class LevelOneBedroomScreen(Screen):

    def __init__(self, **kwargs):
        super(LevelOneBedroomScreen, self).__init__(**kwargs)

    def next_text(self):
        #Here is where I want to use variables
        example_var_a = self.ids.level_one_bedroom_progress.text
        example_var_b = self.ids.level_one_bedroom_text.text
        if example_var_a == 'a01':
            example_var_b = 'Why is it that no matter how much I sleep, I always wake up tired?'
            example_var_a = 'a02'
        elif example_var_a == 'a02':
            example_var_b = 'But hey, at least it’s the weekend.  What should I do first?'
            example_var_a = 'a03'
        elif self.ids.level_one_bedroom_progress.text == 'a03': #Decision time!
            self.manager.current = 'level one bedroom choice' 
        elif self.ids.level_one_bedroom_progress.text == 'a03c1':
            self.ids.level_one_bedroom_text.text = 'Do I look like a responsible adult to you?'
            self.ids.level_one_bedroom_progress.text = 'a03c1a'
        elif self.ids.level_one_bedroom_progress.text == 'a03c1a': #Decision time!  
            self.manager.ids.level_one_bedroom_choice.ids.level_one_bedroom_choice_progress.text = 'a01a'
            self.manager.current = 'level one bedroom choice'       
        elif self.ids.level_one_bedroom_progress.text == 'a03c2':
            self.ids.level_one_bedroom_text.text = 'Nothing gets your day started like a hearty brownie!'
            self.ids.level_one_bedroom_progress.text = 'a03c2a' 
        elif self.ids.level_one_bedroom_progress.text == 'a03c2a': #Time to Move!
            self.ids.level_one_bedroom_text.text = 'To the Kitchen!  Post-haste!'
            self.ids.level_one_bedroom_left_button.text = 'Kitchen'
        elif self.ids.level_one_bedroom_progress.text == 'a03c3':
            self.ids.level_one_bedroom_text.text = 'I\'m too tired for this.  Back to sleep it is!'
            self.ids.level_one_bedroom_progress.text = 'a03c3a'
        elif self.ids.level_one_bedroom_progress.text == 'a03c3a':
            self.ids.level_one_bedroom_text.text = 'Goodnight World!'
            self.ids.level_one_bedroom_progress.text = 'a03cb'             
        elif self.ids.level_one_bedroom_progress.text == 'a03cb':
            self.manager.current = 'game over'
            self.manager.ids.game_over.ids.game_over_text.text = 'a01'
            self.manager.ids.game_over.ids.game_over_text.text = 'And so you went to sleep.'

    def next_move(self):
        if self.ids.level_one_bedroom_progress.text == 'a03c2a':
            self.manager.current = 'level one kitchen' 

这是.kv:     #:import FadeTransition kivy.uix.screenmanager.FadeTransition

<RootScreen>:
    transition: FadeTransition() 
    StartScreen:
        id: start_screen
    LevelsScreen:
        id: levels_screen
    LevelOneBedroomScreen:
        id: level_one_bedroom


<StartScreen>:
    name: 'start'
    canvas.before:
        Rectangle:
            pos: self.pos
            size: self.size
            source: 'start_screen.png'
    FloatLayout:
        Image:     
            source: 'start_screen.png'
            allow_stretch: True
            keep_ratio: False
            size_hint: 1, 1
        Button:
            text: 'Start'
            size_hint: 0.4, 0.3
            pos_hint: {'center_x':.5, 'center_y':.5}
            font_size: 70
            on_release: root.manager.current = 'levels' 


<LevelsScreen>:
    name: 'levels'
    BoxLayout:
        padding: 20
        spacing: 10
        orientation: 'vertical'
        BoxLayout:
            spacing: 10
            Button:
                text: 'Level 1'
                on_release: root.manager.current = 'level one bedroom'
            Button:
            Button:
        BoxLayout:
            spacing: 10
            Button:
            Button:
            Button:     
        BoxLayout:
            spacing: 10
            Button:
            Button:
            Button:     


<LevelOneBedroomScreen>:
    name: 'level one bedroom'
    FloatLayout:
        Label:
            id: level_one_bedroom_progress
            text: 'a01'
    Image:
        id: level_one_bedroom_image
        source: 'placeholder_background.png'
        size: self.size
        pos: self.pos
        allow_stretch: True
        keep_ratio: False
    BoxLayout:
        orientation: 'vertical'
        BoxLayout:
            orientation: 'vertical'
            Label:
                text: 'Image of Bedroom'
                text_size: self.width, None
                valign: 'middle'
                halign: 'center'
            Button:
                id: level_one_bedroom_text
                size_hint_y: .32
                text: '*YAWN*'
                color: .5,.2,1,1
                background_color: 0,0,0,0
                text_size: self.width, None
                valign: 'middle'
                halign: 'center'
                on_release: root.next_text()
        BoxLayout:
            size_hint_y: .15
            Button:
                id: level_one_bedroom_left_button
                background_color: 0,0,0,0
                on_release: root.next_move()
            Button:
                text: 'Home'    
                on_release: root.manager.current = 'levels'         
            Button:
                id: level_one_bedroom_right_button
                background_color: 0,0,0,0

当我在不使用变量的情况下编写整个内容时,它可以正常工作。我所讨论的变量在类中:LevelOneBedroomScreen,变量为:example_var_a,example_var_b。先谢谢你。

0 个答案:

没有答案