我正在尝试从简介屏幕获取昵称,然后在标签中使用此昵称构建聊天屏幕。但是,我无法正常使用我的函数。
.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文件中看哪里?
答案 0 :(得分:1)
id
中kv
分配的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