Python Kivy ссылки между классами - PullRequest
0 голосов
/ 08 мая 2018

Вот соответствующий код .py:

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 LevelOneBedroomScreen(Screen):
    def __init__(self, **kwargs):
        super(LevelOneBedroomScreen, self).__init__(**kwargs)

    def next_text(self):
        if self.ids.level_one_bedroom_text.text == '*YAWN*':
            self.ids.level_one_bedroom_image.source = 'placeholder_background2.png'
            self.ids.level_one_bedroom_text.text = 'Hello'
        elif self.ids.level_one_bedroom_text.text == 'Hello':
            self.manager.current = 'level one bedroom choice'   

class LevelOneBedroomChoiceScreen(Screen):
    def __init__(self, **kwargs):
        super(LevelOneBedroomChoiceScreen, self).__init__(**kwargs)

    def get_image(self):
        #This part is not working
        self.ids.level_one_bedroom_choice_image.source = LevelOneBedroomScreen.ids.level_one_bedroom_image.source


class screensApp(App):
    def build(self):
        return RootScreen()

if __name__ == "__main__":
    screensApp().run()

В нижней части я прокомментировал ту часть кода, которая не работает.У меня есть два, почти идентичных экрана, где на одном LevelOneBedroomScreen есть текст, а на LevelOneBedroomChoiceScreen есть кнопки.Мне нужно, чтобы оба фоновых изображения были одинаковыми, и, поскольку первый экран обновляет изображения, я иногда что-то записывал в файл .kv, чтобы, надеюсь, вытащить изображение с первого экрана, но это приводит к ошибке.Вот соответствующий код из .kv:

#:import FadeTransition kivy.uix.screenmanager.FadeTransition

<RootScreen>:
    transition: FadeTransition() 
    LevelOneBedroomScreen:
    LevelOneBedroomChoiceScreen:

<LevelOneBedroomScreen>:
    name: 'level one bedroom'
    id: level_one_bedroom
    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'
        Label:
            text: 'Image of Bedroom'
        Button:
            text: 'Dialogue'
            background_color: 0,0,0,0       
    BoxLayout:
        size_hint_y: .2
        Label:
            text: 'left arrow'
        Button:
            text: 'choose'  
            on_release: root.manager.current = 'level one bedroom choice'           
        Label:
            text: 'right arrow'         
<LevelOneBedroomChoiceScreen>:
    name: 'level one bedroom choice'
    id: level_one_bedroom_choice
    Image:
        id: level_one_bedroom_choice_image
        source: get_image()
        size: self.size
        pos: self.pos
        allow_stretch: True
        keep_ratio: False
    BoxLayout:
        orientation: 'vertical'
        Label:
            text: 'Image of Bedroom'
        BoxLayout:
            orientation: 'vertical'
            BoxLayout:
                Button:
                    text: 'choice 1'
                Button:
                    text: 'choice 2'
            BoxLayout:
                Button:
                    text: 'choice 3'
                Button:
                    text: 'choice 4'
        BoxLayout:
            size_hint_y: .2
            Label:
                text: 'left arrow'
            Button:
                text: 'home'    
                on_release: root.manager.current = 'levels'         
            Label:
                text: 'right arrow' 

Я вставил комментарий, показывающий, какая часть кода приводит к ошибке.Заранее благодарю, очень ценю ваши отзывы.

1 Ответ

0 голосов
/ 08 мая 2018

Использование Kivy Screen Manager , замена LevelOneBedroomScreen.ids.level_one_bedroom_image.source на self.manager.ids.level_one_bedroom.ids.level_one_bedroom_image.source

* *

Пример

main.py

from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen


class Home(ScreenManager):
    pass


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

    def next_text(self):
        if self.ids.level_one_bedroom_text.text == '*YAWN*':
            self.ids.level_one_bedroom_image.source = 'placeholder_background2.png'
            self.ids.level_one_bedroom_text.text = 'Hello'
        elif self.ids.level_one_bedroom_text.text == 'Hello':
            self.manager.current = 'level one bedroom choice'


class LevelOneBedroomChoiceScreen(Screen):
    def __init__(self, **kwargs):
        super(LevelOneBedroomChoiceScreen, self).__init__(**kwargs)

    def on_pre_enter(self, *args):
        self.ids.level_one_bedroom_choice_image.source = self.manager.ids.level_one_bedroom.ids.level_one_bedroom_image.source


class TestApp(App):

    def build(self):
        return Home()


if __name__ == "__main__":
    TestApp().run()

test.kv

#:kivy 1.9.1

<Home>:
    LevelOneBedroomScreen:
        id: level_one_bedroom
    LevelOneBedroomChoiceScreen:
        id: level_one_bedroom_choice

<LevelOneBedroomScreen>:
    name: 'level one bedroom'
    BoxLayout:
        orientation: 'vertical'
        Image:
            id: level_one_bedroom_image
            source: 'bedroom.jpeg'  # 'placeholder_background.png'
            size: self.size
            pos: self.pos
            allow_stretch: True
            keep_ratio: False
        Button:
            size_hint: 1, 0.2
            text: 'Bedroom Choice'
            on_release: root.manager.current = 'level one bedroom choice'

<LevelOneBedroomChoiceScreen>:
    name: 'level one bedroom choice'
    Image:
        id: level_one_bedroom_choice_image
        #below is the code that fails
        # source:
        size: self.size
        pos: self.pos
        allow_stretch: True
        keep_ratio: False

выход

Img01 - App Startup Img02 - Bedroom Choice Screen

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...