2016-02-05 58 views
0

我试图从介绍屏幕获取昵称,然后在标签中使用此昵称构建聊天屏幕。但是,我无法让我的功能正确地使用ID。在另一个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也是如此,但我甚至无法通过第一个错误。我在id之前丢失了什么,告诉Python,在kv文件中看什么?

回答

1

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

这是chat.kv

但是,可以只使用kv语言来实现所期望的行为

#: import FadeTransition kivy.uix.screenmanager.FadeTransition 

<[email protected]>: 

Screens: 
    transition: FadeTransition() 
    Intro 
    Chat 

<[email protected]>: 
    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" 

<[email protected]>: 
    name: "main" 
    Label: 
     id: lb_name 

这是chat.py

from kivy.app import App 

class ChatApp(App): 
    pass 

if __name__ == "__main__": 
    ChatApp().run() 
相关问题