Почему я не могу получить доступ к источнику моего изображения с помощью Screenmanager и ObjectProperty? - PullRequest
0 голосов
/ 18 июня 2020

Я хочу получить доступ к источнику моего изображения, указав его идентификатор. Когда я пробую использовать этот способ без использования ScreenManager, он работает нормально, но с использованием ScreenManager выдает следующее сообщение об ошибке:

AttributeError: объект 'kivy.properties.ObjectProperty' не имеет атрибута 'source'

Итак, вы знаете, как получить доступ к моему изображению с помощью ScreenManager?

Python код:

from kivy.app import App
from kivy.properties import ObjectProperty

from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.image import Image


class MainWindow(Screen):

    img1 = ObjectProperty(None)

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

    self.print_image()

def print_image(self):
    print(self.img1)


class SecondWindow(Screen):
    pass


class WindowManager(ScreenManager):
    pass


Gui = Builder.load_file("my.kv")


class MyApp(App):
    def build(self):
        return Gui


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

кв код:

WindowManager:
    MainWindow:
    SecondWindow:

<MainWindow>:
    name: "main"
    img1: img1

    Button:
        id: b1
        text: "Submit"

    Image:
        id: img1
        source: "IMG_8681.jpg"


<SecondWindow>:
    name: "second"

    Button:
        text: "Go Back"
        on_release:
            app.root.current = "main"
            root.manager.transition.direction = "right"

Заранее большое спасибо!

1 Ответ

1 голос
/ 18 июня 2020

Вы можете получить доступ к Image, как вы описали, но оператор print в классе, вне любого метода, выполняется при загрузке класса и даже до загрузки файла kv.

Вы можете получить доступ к Image следующим образом:

print(Gui.get_screen('main').img1)

или внутри метода в классе MainWindow вы можете использовать:

print(self.img1)

Но вы должны подождать, пока App запускается

...