【问题标题】:Exchanging Variables between Screens in kivy python在kivy python中的屏幕之间交换变量
【发布时间】:2015-01-03 18:27:19
【问题描述】:

我尝试制作一个具有两个屏幕的应用程序,一个带有 Textinput,另一个带有 Label,用于显示 TextInput 的文本。 我试图通过在应用程序类中创建一个 StringProperty 来做到这一点,但我在访问该属性时遇到了问题。 我想知道如何访问变量。 以下是源代码:

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.properties import StringProperty
from kivy.uix.boxlayout import BoxLayout


class Manager(ScreenManager):
    pass
class FirstScreen(Screen):
    pass
class SecondScreen(Screen):
    pass
root_widget = Builder.load_string('''
Manager:
    FirstScreen:
    SecondScreen:
<FirstScreen>:
    name: 'first'
    BoxLayout:
        orientation: 'vertical'
        TextInput:
            id: my_text
            font_size: 50
        Button:
            id: b1
            text: 'Go to next Screen'
            on_release: app.root.current = 'second'
<SecondScreen>:
    name: 'second'
    BoxLayout:
        orientation: 'vertical'
        Label:
            id: my_Label
            text: root.txt
        Button
            id: b2
            text: 'Go back'
            on_release: app.root.current = 'first'
''')
class Caption(App):
    txt = StringProperty('')
    def build(self):
        return root_widget

Caption().run()

【问题讨论】:

标签: python-2.7 properties kivy


【解决方案1】:

Screen 类有一个名为“manager”的属性,它指定该屏幕属于哪个管理器。在 ScreenManager 类中,有一个名为“screens”的属性,它是一个包含所有屏幕的 ListProperty 对象。如果您想获取有关另一个屏幕的信息,可以使用这种方式。在你的情况下,你需要在你的 kv Builder 中更新你的 b1 id 按钮:

Button:
    id: b1
    text: 'Go to next screen'
    on_release:
        root.manager.screens[1].ids.my_Label.text = root.ids.my_text.text
        root.manager.current = 'second'

对于更复杂的行为,您可以在该特定页面类中定义相关属性,并通过以下方式从 python 中获取:

self.manager.screens[<screen_number>].ids.<widget_id>.<property_name>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多