为什么不能使用Screenmanager和ObjectProperty访问图像的来源?

问题描述 投票:0回答:1

我想通过指向图像ID来访问图像的源。当我不使用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)

    print(img1.source)


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()

kv代码:

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"

非常感谢!

python properties kivy kivy-language
1个回答
0
投票

您可以按照描述的方式访问Image,但是在类加载时甚至在加载print文件之前,都将在任何方法之外的类中执行kv语句。

您可以这样访问Image

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

或在MainWindow类的方法中,可以使用:

print(self.img1)

但是您必须等到App开始

© www.soinside.com 2019 - 2024. All rights reserved.