在另一个Kivy屏幕中编辑小部件

时间:2016-02-05 13:08:29

标签: python python-3.x kivy

我正在尝试从简介屏幕获取昵称,然后在标签中使用此昵称构建聊天屏幕。但是,我无法正常使用我的函数。

.kv:

#: import FadeTransition kivy.uix.screenmanager.FadeTransition

Screens:
    transition: FadeTransition()
    Intro
    Chat

<Intro>:
    id: intro
    TextInput:
        id: intro_text
        ...
    Button:
        ...
        on_press: root.intro_bt_press()

<Chat>:
    name: "main"
    Label:
        id: lb_name

的.py:

from kivy import require
require("1.9.1")
from kivy.app import App
from kivy.uix.screenmanager import Screen, ScreenManager, FadeTransition
from kivy.lang import Builder

nick = ""

class Chat(Screen):
    lb_name.text = "Chat with {}".format(nick)

class Intro(Screen):
    global nick
    def intro_bt_press(self):
        nick = intro_text.text
        App.get_running_app().root.current = "main"

class Screens(ScreenManager):
    pass

Screens = Builder.load_file("chat.kv")

class Chat(App):
    def build(self):
        return Screens

if __name__ == "__main__":
    Chat().run()

因此,当按下按钮时,我想从TextInput获取文本,切换到主屏幕并使用文本格式化该屏幕上的标签。我无法将文本分配给变量“nick”,因为它表示它未定义。对于lb_name也是如此,但我甚至无法超越第一个错误。在告诉Python的id之前我错过了什么,在kv文件中看哪里?

1 个答案:

答案 0 :(得分:1)

idkv分配的ids可用self.ids['intro_text'].text 属性。如果要访问Python文件中的小部件,请在intro_bt_press中使用kv之类的内容。

但是,只需使用chat.kv语言即可实现所需的行为:

这是#: import FadeTransition kivy.uix.screenmanager.FadeTransition <Screens@ScreenManager>: Screens: transition: FadeTransition() Intro Chat <Intro@Screen>: BoxLayout: TextInput: id: intro_text Button: on_press: root.manager.get_screen('main').ids.lb_name.text = root.ids.intro_text.text root.manager.current = "main" <Chat@Screen>: name: "main" Label: id: lb_name

chat.py

这是from kivy.app import App class ChatApp(App): pass if __name__ == "__main__": ChatApp().run()

return null