代码之家  ›  专栏  ›  技术社区  ›  immeeh

Python Kivy:在类中使用变量与Kivy[关闭]

  •  0
  • immeeh  · 技术社区  · 6 年前

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

    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' 
    

    这是。千伏: #:导入FadeTransition kivy。uix。屏幕管理器。音量转换

    <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\u var\u a,example\u var\u b。高级感谢。

    1 回复  |  直到 6 年前
        1
  •  2
  •   eyllanesc Yonghwan Shin    6 年前

    使用以下行:

    example_var_b = self.ids.level_one_bedroom_text.text
    

    您没有指定属性,而是指定属性的值,因此在修改 example_var_b 不会修改文本。

    如果要使代码更具可读性,请创建两个存储文本和进度的属性,这些属性将分配给标签和按钮的文本,如下所示:

    *.千伏

    ...
    <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' 
    
    ...