7

Kivy Screen Manager を使用して、2 つの画面を作成します。画面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()

どんな助けでも大歓迎です!ありがとう、ニコ

4

1 に答える 1

12

これはどう:

MenuScreen でボタンを押すと、SettingsScreen ラベルに入れたいテキストを含む属性がそれ自体に設定されます。次に、この属性を参照するために使用される kv ファイルで MenuScreen に id 値が割り当てられます。例:

main.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 を設定しました。これは、これを機能させるために通常行うことです。

于 2014-12-09T09:57:29.840 に答える