如何从另一个Screen类访问Kivy类的值?

2024-07-08 10:56:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要从Kivy代码中的<ShareScreen>访问第34行中声明的LoginScreen().filename的值。换句话说,filename有一个图像的路径,我需要在ShareScreen屏幕上显示该图像。以下是我尝试过的:

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


Builder.load_string("""
<LoginScreen>:
    GridLayout:
        cols: 1
        Button:
            text: 'Next Screen'
            size_hint_y: None
            height: '48dp'
            on_press: root.next_screen()

<ShareScreen>:
    GridLayout:
        cols: 1
        Image:
            source: app.root.login_screen.filename

<RootWidget>:
    LoginScreen:
        id: login_screen
        name: "login_screen"
    ShareScreen:
        id: share_screen
        name: "share_screen"
""")

class LoginScreen(Screen):

    def next_screen(self):
        self.filename = 'photo.png'
        self.manager.current = "share_screen"

class ShareScreen(Screen):
    pass


class RootWidget(ScreenManager):
    pass

class MainApp(App):
    def build(self):
        return RootWidget()


MainApp().run()

该代码给了我以下错误:

 >>   15:            source: app.root.login_screen.filename
      16:
      17:<RootWidget>:
 ...
 AttributeError: 'NoneType' object has no attribute 'login_screen'

如何获取图像的路径(即filename值)以在ShareScreen中显示它


Tags: from图像importselfapploginrootfilename
1条回答
网友
1楼 · 发布于 2024-07-08 10:56:07

您可以将ShareScreen规则更改为:

<ShareScreen>:
    GridLayout:
        cols: 1
        Image:
            id: img

它删除了有问题的source,并向Image添加了一个id。然后可以将next_screen方法更改为:

class LoginScreen(Screen):

    def next_screen(self):
        self.manager.current = "share_screen"
        self.manager.current_screen.ids.img.source = 'photo.png'

它设置Image的源

相关问题 更多 >

    热门问题