【问题标题】:Kivy - Screen Manager - Accessing attribute in other classKivy - 屏幕管理器 - 访问其他类中的属性
【发布时间】:2015-02-06 09:15:12
【问题描述】:

使用 Kivy 屏幕管理器,我创建了两个屏幕。在屏幕 1 中,我想更改屏幕 2 中的标签。我在我的代码中突出显示有问题的区域:

我的test.ky:

#: import ScreenManager kivy.uix.screenmanager.ScreenManager
#: import Screen kivy.uix.screenmanager.ScreenManager
#: import SettingsScreen screen


ScreenManager:
    MenuScreen:
    SettingsScreen:


<MenuScreen>:
    name: 'MenuScreen'
    BoxLayout:
        Button:
            text: 'Goto nn'
            on_press: 
                root.manager.current = 'SettingsScreen'
                root.change_text()


<SettingsScreen>:
    name: 'SettingsScreen'
    label_id: label_field
    BoxLayout:
        Label:
            id: label_field
            text: "to_be_changed"

还有我的 screen.py

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


class MenuScreen(Screen):
    def change_text(self):
        pass
        # HERE: something like
        # root.SettingsScreen.label_field.text = 'new text'


class SettingsScreen(Screen):
    pass


class TestApp(App):
    pass

TestApp().run()

非常感谢任何帮助! 谢谢,尼科

【问题讨论】:

    标签: python kivy screens


    【解决方案1】:

    这个怎么样:

    当您按下 MenuScreen 上的按钮时,它会在自身上设置一个属性,其中包含您要放入 SettingsScreen 标签中的文本。然后在kv文件中给MenuScreen分配一个id值,用来引用这个属性。示例:

    ma​​in.py

    class MenuScreen(Screen):
        text = StringProperty('')
        def change_text(self):
            self.text = "The text you want to set"
            self.manager.current = "SettingsScreen"
    
    class SettingsScreen(Screen):
        label_text = StringProperty('')
    

    kv 文件

    ScreenManager:
        id: screen_manager
        MenuScreen:
            id: menu_screen
            name: 'MenuScreen'
            manager: screen_manager
        SettingsScreen:
            name: 'SettingsScreen'
            manager: screen_manager
            label_text: menu_screen.text
    
    <MenuScreen>:
        BoxLayout:
            Button:
                text: 'Goto nn'
                on_press:
                    root.change_text()
    
    <SettingsScreen>:
        BoxLayout:
            Label:
                text: root.label_text
    

    如您所见,我在 kv 文件中的 ScreenManager 下设置了屏幕的名称和 ID,因为这是我通常会做的事情。

    【讨论】:

    • 我需要导入属性:from kivy.properties import StringProperty
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 2020-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多