0

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

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。提前谢谢你。

4

1 回答 1

2

使用以下行:

example_var_b = self.ids.level_one_bedroom_text.text

您不是分配属性而是分配它的值,因此修改后example_var_b的文本不会被修改。

如果您想让您的代码更具可读性,请创建 2 个属性来存储文本和进度,并将这些属性分配给 Label 和 Button 的文本,如下所示:

*.kv

...
<LevelOneBedroomScreen>:
    name: 'level one bedroom'
    level_one_bedroom_progress: "a01" # <--- property
    level_one_bedroom_text: '*YAWN*'  # <--- property
    FloatLayout:
        Label:
            text: root.level_one_bedroom_progress # <--- set value
    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:
                size_hint_y: .32
                text: root.level_one_bedroom_text # <--- set value
                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

*.py

...
class LevelOneBedroomScreen(Screen):
    def next_text(self):
        if self.level_one_bedroom_progress == 'a01':
            self.level_one_bedroom_text = 'Why is it that no matter how much I sleep, I always wake up tired?'
            self.level_one_bedroom_progress = 'a02'
        elif self.level_one_bedroom_progress == 'a02':
            self.level_one_bedroom_text = 'But hey, at least it’s the weekend.  What should I do first?'
            self.level_one_bedroom_progress = 'a03'
        elif self.level_one_bedroom_progress == 'a03': #Decision time!
            self.manager.current = 'level one bedroom choice' 

        elif self.level_one_bedroom_progress == 'a03c1':
            self.level_one_bedroom_text = 'Do I look like a responsible adult to you?'
            self.level_one_bedroom_progress = 'a03c1a'

        elif self.level_one_bedroom_progress == '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.level_one_bedroom_progress == 'a03c2':
            self.level_one_bedroom_text = 'Nothing gets your day started like a hearty brownie!'
            self.level_one_bedroom_progress = 'a03c2a' 
        elif self.level_one_bedroom_progress == 'a03c2a': #Time to Move!
            self.level_one_bedroom_text = 'To the Kitchen!  Post-haste!'
            self.level_one_bedroom_left_button = 'Kitchen'
        elif self.level_one_bedroom_progress == 'a03c3':
            self.level_one_bedroom_text = 'I\'m too tired for this.  Back to sleep it is!'
            self.level_one_bedroom_progress = 'a03c3a'
        elif self.level_one_bedroom_progress == 'a03c3a':
            self.level_one_bedroom_text = 'Goodnight World!'
            self.level_one_bedroom_progress = 'a03cb'             
        elif self.level_one_bedroom_progress == '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.level_one_bedroom_progress == 'a03c2a':
            self.manager.current = 'level one kitchen' 

...
于 2018-05-09T21:25:38.637 回答